2012-05-11 30 views
67

No quiero dividir la cadena de conexión utilizando la manipulación de cadenas y obtener servidor, base de datos, uid y contraseña.Cómo obtener el nombre de la base de datos de la cadena de conexión utilizando SqlConnectionStringBuilder

Leí el siguiente enlace y leí la respuesta aceptada, encontré que es la mejor manera de obtener el ID de usuario y la contraseña de la cadena de conexión, pero ¿qué pasa con el nombre de la base de datos?

Right way to get username and password from connection string?

Como ir de base de datos Nombre de la cadena de conexión usando SqlConnectionStringBuilder. (¿El origen de datos es el nombre del servidor?)

Respuesta

3

Puede usar la propiedad InitialCatalog o builder["Database"] también. Lo probé con diferentes casos y todavía funciona.

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

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectString); 

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

Puede utilizar la clase ConnectionStringBuilder específico del proveedor (en el espacio de nombre adecuado), o System.Data.Common.DbConnectionStringBuilder para abstraer el objeto cadena de conexión si es necesario. Que había necesidad de conocer las palabras clave específicas del proveedor utilizados para designar la información que está buscando, pero para un ejemplo de SQL Server que podría hacer cualquiera de estas dos cosas:

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

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

o

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

Para mí, la última línea tenía que ser: 'cadena de base de datos = fabricantes [ "Initial Catalog"] como cadena;' - "Base de datos" era una palabra clave válida. – Sandra

+0

@Sandra sí tu correcto. constructor ["Base de datos"] como cadena funcionará si usamos SqlConnectionStringBuilder. –

4

esto le da el 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

Una alternativa mucho más simple es obtener la información del objeto de conexión. Por ejemplo:

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

De forma similar, puede obtener el nombre del servidor también del objeto de conexión.

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

Esto es lo que estaba buscando. Gracias. –

+0

Esto se vuelve específico para 'SqlConnection'. ¿Hay alguna forma similar de hacer este RDBMS cruzado? –

+0

@AmitJoshi ¿No deberían implementar 'IDbConnection'? – nawfal

Cuestiones relacionadas