Cara mendapatkan Nama Database dari Connection String menggunakan SqlConnectionStringBuilder

92

Saya tidak pernah ingin membagi string koneksi menggunakan manipulasi string dan mendapatkan server, database, uid, dan kata sandi.

Saya membaca tautan berikut dan membaca jawaban yang diterima, saya menemukan bahwa itu adalah cara terbaik untuk mengeluarkan userid dan kata sandi dari string koneksi, tetapi bagaimana dengan Nama Database?

Cara yang benar untuk mendapatkan nama pengguna dan kata sandi dari string koneksi?

Cara mendapatkan Nama Database dari Connection String menggunakan SqlConnectionStringBuilder. (apakah Sumber Data adalah nama Server?)

Imran Rizvi
sumber

Jawaban:

152

Anda dapat menggunakan kelas ConnectionStringBuilder khusus penyedia (dalam namespace yang sesuai), atau System.Data.Common.DbConnectionStringBuilderuntuk mengabstraksi objek string koneksi jika perlu. Anda perlu mengetahui kata kunci khusus penyedia yang digunakan untuk menentukan informasi yang Anda cari, tetapi untuk contoh SQL Server, Anda dapat melakukan salah satu dari dua hal berikut:

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

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

atau

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;
Romil Kumar Jain
sumber
2
Bagi saya, baris terakhir harus: string database = builder["Initial Catalog"] as string;- "Database" adalah kata kunci yang tidak valid.
Sandra
@ Sandra ya ur benar. builder ["Database"] sebagai string akan bekerja jika kita menggunakan SqlConnectionStringBuilder.
Romil Kumar Jain
32

Alternatif yang lebih sederhana adalah mendapatkan informasi dari objek koneksi itu sendiri. Sebagai contoh:

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

Demikian pula Anda bisa mendapatkan nama server juga dari objek koneksi.

DbConnection connection = new SqlConnection(connectionString);
var server = connection.DataSource;
nawfal
sumber
Inilah yang saya cari. Terima kasih.
Ivan Santiago
Ini menjadi khusus untuk SqlConnection. Apakah ada jalan keluar yang serupa untuk membuat RDBMS silang ini?
Amit Joshi
@AmitJoshi Haruskah mereka semua menerapkan IDbConnection?
nawfal
@nawfal: Saya setuju tapi itu tetap tidak membuatnya bisa digunakan. Saya telah menjelaskan hal ini secara rinci dalam pertanyaan ini. stackoverflow.com/q/47727524/5779732
Amit Joshi
Itu bisa mendapatkan Database dan DataSource, tetapi tidak bisa mendapatkan userId dan kata sandi dengan cara ini.
Dush
12
string connectString = "Data Source=(local);" + "Integrated Security=true";

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectString);

Console.WriteLine("builder.InitialCatalog = " + builder.InitialCatalog);
Kishore Kumar
sumber
7

ini memberi Anda Xact;

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.
pvaju896
sumber
4

Anda dapat menggunakan Properti InitialCatalog atau builder["Database"]bekerja juga. Saya mengujinya dengan case yang berbeda dan masih berfungsi.

Habib
sumber