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?)

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;

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;

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);

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.


4

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.