Cách lấy Tên cơ sở dữ liệu từ Chuỗi kết nối bằng SqlConnectionStringBuilder


88

Tôi không bao giờ muốn chia chuỗi kết nối bằng thao tác chuỗi và lấy máy chủ, cơ sở dữ liệu, uid và mật khẩu.

Tôi đọc liên kết sau và đọc câu trả lời được chấp nhận, tôi thấy đó là cách tốt nhất để lấy userid và mật khẩu ra khỏi chuỗi kết nối, nhưng còn Tên cơ sở dữ liệu thì sao?

Cách đúng để lấy tên người dùng và mật khẩu từ chuỗi kết nối?

Cách lấy Tên cơ sở dữ liệu từ Chuỗi kết nối bằng SqlConnectionStringBuilder. (DataSource có phải là tên Máy chủ không?)

Câu trả lời:



148

Bạn có thể sử dụng lớp ConnectionStringBuilder dành riêng cho nhà cung cấp (trong không gian tên thích hợp) hoặc System.Data.Common.DbConnectionStringBuilderđể tóm tắt đối tượng chuỗi kết nối nếu bạn cần. Bạn cần biết các từ khóa dành riêng cho nhà cung cấp được sử dụng để chỉ định thông tin bạn đang tìm kiếm, nhưng đối với ví dụ về SQL Server, bạn có thể thực hiện một trong hai điều sau:

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

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

hoặc là

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
Đối với tôi, dòng cuối cùng cần phải là: string database = builder["Initial Catalog"] as string;- "Cơ sở dữ liệu" là một từ khóa không hợp lệ.
Sandra

@Sandra vâng, bạn đúng. builder ["Cơ sở dữ liệu"] dưới dạng chuỗi sẽ hoạt động nếu chúng ta sử dụng SqlConnectionStringBuilder.
Romil Kumar Jain

32

Một giải pháp thay thế đơn giản hơn nhiều là lấy thông tin từ chính đối tượng kết nối. Ví dụ:

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

Tương tự, bạn cũng có thể lấy tên máy chủ từ đối tượng kết nối.

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

Đây là những gì tôi đang tìm kiếm. Cảm ơn.
Ivan Santiago

Điều này trở nên cụ thể cho SqlConnection. Có cách nào tương tự để tạo RDBMS chéo này không?
Amit Joshi

@AmitJoshi Tất cả họ có nên triển khai IDbConnectionkhông?
nawfal

@nawfal: Tôi đồng ý nhưng điều đó vẫn không làm cho nó sử dụng được. Tôi đã giải thích điều này chi tiết trong câu hỏi này. stackoverflow.com/q/47727524/5779732
Amit Joshi

Nó có thể lấy Database và DataSource, nhưng không thể lấy userId và mật khẩu theo cách này.
Dush

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

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectString);

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

7

điều này mang lại cho bạn 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

Bạn có thể sử dụng Thuộc tính InitialCatalog hoặc builder["Database"]hoạt động tốt. Tôi đã thử nghiệm nó với các trường hợp khác nhau và nó vẫn hoạt động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.