2012-05-11 5 views
67

문자열 조작을 사용하여 연결 문자열을 분할하고 서버, 데이터베이스, uid 및 암호를 가져 오는 작업을 절대로 원하지 않습니다.SqlConnectionStringBuilder를 사용하여 연결 문자열에서 데이터베이스 이름을 얻는 방법

다음 링크를 읽고 허용 된 대답을 읽었습니다. 연결 문자열에서 사용자 ID와 암호를 얻는 가장 좋은 방법은 발견되었지만 데이터베이스 이름은 무엇입니까?

Right way to get username and password from connection string?

어떻게 SqlConnectionStringBuilder를 사용하여 연결 문자열에서 데이터베이스 이름을 얻을 수 있습니다.

답변

40

참조 MSDN documentation for InitialCatalog Property (? 데이터 소스는 서버 이름 않음) :

가져 오거나 연결과 관련된 데이터베이스의 이름을 설정 ...

이 속성은 "초기 카탈로그에 해당 "및"데이터베이스 "키를 ...

3

InitialCatalog 속성이나 builder["Database"]도 사용할 수 있습니다. 나는 다른 케이스로 그것을 시험하고 아직도 작동한다. 추상적 연결 문자열 객체에

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

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectString); 

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

당신은 (적절한 네임 스페이스 내에서) 공급자 별 ConnectionStringBuilder 클래스를 사용하거나 System.Data.Common.DbConnectionStringBuilder 당신이 필요합니다. 당신은 당신이 찾고있는 정보를 지정하는 데 사용 공급자 별 키워드를 알아야 할 것입니다,하지만 SQL 서버 예를 들어, 당신은이 두 가지 중 하나를 할 수 :

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

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

또는

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; 
+1

마지막 줄은 다음과 같아야합니다. 문자열 데이터베이스 = builder [ "초기 카탈로그"] 문자열로; - "데이터베이스"는 잘못된 키워드입니다. – Sandra

+0

@Sandra 예 맞아. SqlConnectionStringBuilder를 사용하면 builder [ "Database"]가 문자열로 작동합니다. –

4

이것은 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. 
20

훨씬 간단한 대안은 연결 개체 자체에서 정보를 얻을 수 있습니다. 예 :

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

마찬가지로 연결 개체에서 서버 이름을 가져올 수 있습니다.

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

이것은 내가 찾고 있었던 것이다. 감사. –

+0

이것은 'SqlConnection'과 관련됩니다. 이 교차 RDBMS를 만들 수있는 비슷한 방법이 있습니까? –

+0

@AmitJoshi 그들은 모두'IDbConnection'을 구현해야합니까? – nawfal

관련 문제