SqlConnectionStringBuilder kullanarak Bağlantı Dizesinden Veritabanı Adı nasıl alınır


92

Bağlantı dizesini dize işlemeyi kullanarak bölmek ve sunucu, veritabanı, kullanıcı kimliği ve şifre almak istemiyorum.

Aşağıdaki bağlantıyı okudum ve kabul edilen cevabı okudum, bunun kullanıcı kimliği ve şifreyi bağlantı dizesinden çıkarmanın en iyi yolu olduğunu buldum, peki ya Veritabanı Adı?

Bağlantı dizesinden kullanıcı adı ve şifre almanın doğru yolu?

Veritabanı Adı SqlConnectionStringBuilder kullanılarak Bağlantı Dizesinden nasıl alınır. (DataSource Sunucu adı mı?)

Yanıtlar:



152

Sağlayıcıya özgü ConnectionStringBuilder sınıfını (uygun ad alanı içinde) veya System.Data.Common.DbConnectionStringBuildergerekirse bağlantı dizesi nesnesini soyutlamak için kullanabilirsiniz. Aradığınız bilgiyi belirtmek için kullanılan sağlayıcıya özgü anahtar kelimeleri bilmeniz gerekir, ancak bir SQL Server örneği için şu iki şeyden birini yapabilirsiniz:

System.Data.SqlClient.SqlConnectionStringBuilder builder = new System.Data.SqlClient.SqlConnectionStringBuilder(connectionString);

string server = builder.DataSource;
string database = builder.InitialCatalog;

veya

System.Data.Common.DbConnectionStringBuilder builder = new System.Data.Common.DbConnectionStringBuilder();

builder.ConnectionString = connectionString;

string server = builder["Data Source"] as string;
string database = builder["Initial Catalog"] as string;

2
Benim için son satırın şu olması gerekiyordu: string database = builder["Initial Catalog"] as string;- "Veritabanı" geçersiz bir anahtar kelimeydi.
Sandra

@Sandra evet doğru. Builder ["Veritabanı"] dizge olarak SqlConnectionStringBuilder kullanırsak çalışacaktır.
Romil Kumar Jain

32

Çok daha basit bir alternatif, bilgiyi bağlantı nesnesinin kendisinden almaktır. Örneğin:

IDbConnection connection = new SqlConnection(connectionString);
var dbName = connection.Database;

Benzer şekilde, sunucu adını bağlantı nesnesinden de alabilirsiniz.

DbConnection connection = new SqlConnection(connectionString);
var server = connection.DataSource;

Aradığım buydu. Teşekkürler.
Ivan Santiago

Bu, için özel hale gelir SqlConnection. Bu çapraz RDBMS'yi yapmanın benzer bir yolu var mı?
Amit Joshi

@AmitJoshi Hepsi uygulamalı IDbConnectionmı?
nawfal

@ nawfal: Katılıyorum ama bu yine de onu kullanılabilir yapmıyor. Bunu bu soruda detaylı olarak anlattım. stackoverflow.com/q/47727524/5779732
Amit Joshi

Veritabanını ve Veri Kaynağını alabilir, ancak bu şekilde userId ve şifreyi alamaz.
Dush

12
string connectString = "Data Source=(local);" + "Integrated Security=true";

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectString);

Console.WriteLine("builder.InitialCatalog = " + builder.InitialCatalog);

7

bu size Xact'ı verir;

System.Data.SqlClient.SqlConnectionStringBuilder connBuilder = new System.Data.SqlClient.SqlConnectionStringBuilder();

connBuilder.ConnectionString = connectionString;

string server = connBuilder.DataSource;           //-> this gives you the Server name.
string database = connBuilder.InitialCatalog;     //-> this gives you the Db name.


4

InitialCatalog Property'ni veya builder["Database"]çalışmalarını da kullanabilirsiniz . Farklı bir durumla test ettim ve hala çalışıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.