Cómo obtener el nombre de la base de datos de la cadena de conexión usando SqlConnectionStringBuilder

88

Nunca quiero dividir la cadena de conexión usando la manipulación de cadenas y obtener el servidor, la base de datos, el uid y la contraseña.

Leí el siguiente enlace y leí la respuesta aceptada, descubrí 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?

¿Forma correcta de obtener el nombre de usuario y la contraseña de la cadena de conexión?

Cómo obtener el nombre de la base de datos de la cadena de conexión usando SqlConnectionStringBuilder. (¿DataSource es el nombre del servidor?)

Imran Rizvi
fuente

Respuestas:

148

Puede usar la clase ConnectionStringBuilder específica del proveedor (dentro del espacio de nombres apropiado), o System.Data.Common.DbConnectionStringBuilderpara abstraer el objeto de cadena de conexión si es necesario. Debería conocer las palabras clave específicas del proveedor que se utilizan para designar la información que está buscando, pero para un ejemplo de SQL Server, puede hacer una 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;
Romil Kumar Jain
fuente
2
Para mí, la última línea tenía que ser: string database = builder["Initial Catalog"] as string;- "Base de datos" era una palabra clave no válida.
Sandra
@Sandra, sí, tienes razón. builder ["Database"] como cadena funcionará si usamos SqlConnectionStringBuilder.
Romil Kumar Jain
32

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

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

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

DbConnection connection = new SqlConnection(connectionString);
var server = connection.DataSource;
nawfal
fuente
Esto es lo que estaba buscando. Gracias.
Ivan Santiago
Esto se vuelve específico para SqlConnection. ¿Hay alguna salida similar para hacer este RDBMS cruzado?
Amit Joshi
@AmitJoshi ¿No deberían implementar todos IDbConnection?
nawfal
@nawfal: Estoy de acuerdo, pero eso todavía no lo hace utilizable. He explicado esto en detalle en esta pregunta. stackoverflow.com/q/47727524/5779732
Amit Joshi
Puede obtener la base de datos y el origen de datos, pero no pudo obtener el ID de usuario y la contraseña de esta manera.
Dush
11
string connectString = "Data Source=(local);" + "Integrated Security=true";

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectString);

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

esto te 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.
pvaju896
fuente
4

Puede usar InitialCatalog Property o también builder["Database"]funciona. Lo probé con una carcasa diferente y todavía funciona.

Habib
fuente