Expresión de Reg en C #
-
06-07-2019 - |
Pregunta
Di la cadena anterior, quiero obtener la dirección del servidor, DB1, uid y **** estos valores de esa cadena.
Solución
No es necesario analizar una cadena de conexión cuando el BCL puede hacerlo por usted:
var builder = new OleDbConnectionStringBuilder(connectionString);
var provider = builder.Provider;
var dataSource = builder.DataSource;
var initialCatalog = builder["Initial Catalog"];
var userID = builder["User ID"];
var password = builder["Password"];
Tenga en cuenta que para una cadena de conexión OLE DB, solo las propiedades estándar de proveedores cruzados tienen nombres de propiedad fuertemente tipados, se accede al resto a través del indexador.
Otros consejos
No use una expresión regular.
Analiza la cadena de conexión usando SqlConnectionStringBuilder
y luego acceda a las claves desde eso.
var b = new SqlConnectionStringBuilder(myConnectionString);
var dataSource = b["Data Source"];
// etc.
Mucho más fácil, más fácil de mantener y más confiable.
data source=([^;]*);Initial Catalog=([^;]*);user id=([^;]*);Password=([^;"]*)
Luego tienes las coincidencias en los grupos 1 a 4. Si te aburres puedes nombrar los grupos; ayuda a la legibilidad del código, aunque rara vez ayuda a la legibilidad de la expresión regular en sí misma.
¿No es más fácil dividir el valor usando ';' char y luego dividir cada elemento por '=' char?
De esta forma, los usuarios pueden editar su cadena de conexión e incluso se puede cambiar el orden de los elementos.