Crear cadenas de conexión con C#
Una cadena de conexión es un conjunto de claves y valores separados por punto y coma ; . El conjunto de claves y valores esta conectado por el signo de igual por ejemplo clave1=valor1;clave2=valor2
. El conjunto de claves y valores disponibles están definidos por el fabricante de la base de datos y muchas veces hay inconsistencias entre las claves de diferentes proveedores de base de datos.
En este tutorial te muestro como crear, manipular y validar la cadena de conexión para SQL Server, MYSQL, Oracle, Firebird, PostgreSQL y Sqlite usando C# y .NET Core. Para ello utilizamos la clase ConnectionStringBuilder
que implementan los proveedores de ADO.NET. Para cada proveedor de ADO.NET es necesario instalar el paquete de Nuget correspondiente e importar el espacio de nombres con la instrucción using.
En el caso más simple puedes crear la cadena de conexión forma manual y hacerlo de forma programática seria un desperdicio de tiempo (ver el caso para SQLite) pero en ocasiones puede ser un verdadero martirio por el número de claves necesarios y como ejemplo una cadena de conexión para SQL Server con 9 claves.
Data Source=.;Initial Catalog=master;User ID=sa;Password=PasswordO1.;MultipleActiveResultSets=True;Connect Timeout=100;Encrypt=False;Application Name=MyApp;Current Language=spanish
Cadena de conexión SQL Server C#
Para el caso de SQL Server hay 2 variantes de la cadena de conexión y depende de si usas la autenticación integrada de Windows o un usuario de SQL. Generalmente es preferible usar un usuario y contraseña de SQL Server para aplicar el principio de menor autoridad.
Los ejemplos siguientes funcionan en la mayoría de las versiones de SQL Server desde la 2008 , 2012, 2014 , 2016 ,2017 y 2019 en Windows. Para SQL Server 2016 y posteriores también tienen soporte para Linux.
Cadena de conexión SQL Server usando la autenticación de Windows
En el caso de que uses la autenticación de Windows puedes usar el siguiente ejemplo de cadena de conexión para SQL Server. Esto lo que hacer es reutilizar las credenciales del usuario de Windows para conectate a SQL Server.
Data Source=.;Initial Catalog=master;Integrated Security=True
Es importante asegurate que el parámetro Integrated Security
no lo uses en combinación con con un usuario y contraseña SQL Server toma utiliza la autenticación de Windows en lugar de la de SQL Server.
Cadena de conexión SQL Server con usuario y contraseña
Para el caso de SQL Server podemos especificar la dirección IP del servidor donde se encuentra la instancia de SQL Server pero también puedes utilizar un punto .
o localhost
en caso de que el servidor se encuentre en nuestra máquina de desarrollo o el nombre de la instancia de SQL Server en caso de que esta sea diferente a la default por ejemplo SqlServer\NombreInstancia
.
Data Source=192.168.0.1;Initial Catalog=master;User ID=sa;Password=TuContraseña;Application Name=MyApp
Data Source=.;Initial Catalog=master;User ID=sa;Password=TuContraseña;Application Name=MyApp
Data Source=localhost;Initial Catalog=master;User ID=sa;Password=TuContraseña;Application Name=MyApp
Para obtener el nombre de la instancia de SQL Server puedes ejecutar la consulta
SELECT @@SERVERNAME + '\' + @@SERVICENAME AS NombreSQLServerInstancia;
Usando una instancia con nombre de SQL Server
En el caso de que uses una instancia con nombre de SQL Server debes especificar el nombre seguidor del servidor seguido por el nombre de la instancia. Esto también aplica para la version de SQL Server conocida como LocalDb
Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;Application Name=MyApp
Parámetros adicionales
Es importante notar la presencia del parámetro Application Name este campo se puede utilizar para identificar que acciones ejecuta una aplicación y es muy util en el diagnostico de problemas de desempeño en SQL Server Profiler . Es recomendable siempre incluirlo.
Crear una cadena de conexión para SQL Server
Paquete de Nuget es : System.Data.SqlClient y el espacio de nombres System.Data.SqlClient
.
Para poder generar la cadena cadena de conexión de SQL Server usando C# puedes ejecutar el siguiente código
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
builder.DataSource = "192.168.100.154";
builder.InitialCatalog = "master";
builder.UserID = "sa";
builder.Password = "Password";
builder.ApplicationName = "MyApp";
Console.WriteLine(builder.ConnectionString);
Validar una cadena de conexión SQL Server con C#
Una forma de validar que una cadena de conexión es abriendo la comunicación con con la base de datos. Aquí solo mostramos la forma de hacerlo con SQL Server pero es muy similar para los de mas proveedores de ADO.NET.
using (SqlConnection connection = new SqlConnection(builder.ConnectionString))
{
try
{
connection.Open();
Console.WriteLine("Conexión válida");
}
catch (Exception exception)
{
Console.WriteLine(exception.Message);
}
}
Verificar la versión de SQL Server
Para verificar la version que tiene la instancia de SQL Server usando el lenguaje de programación C# puedes ejecutar el siguiente código de que lee la variable global @@version
de SQL Server.
using (SqlConnection connection = new SqlConnection(builder.ConnectionString))
{
try
{
connection.Open();
SqlCommand command = new SqlCommand("SELECT @@Version AS Version;", connection);
SqlDataReader reader = command.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
Console.WriteLine(reader.GetString(0));
}
}
reader.Close();
}
catch (Exception exception)
{
Console.WriteLine(exception.Message);
}
}
Veras una salida similar a a la siguiente
Microsoft SQL Server 2016 (SP2) (KB4052908) - 13.0.5026.0 (X64)
Mar 18 2018 09:11:49
Copyright (c) Microsoft Corporation
Enterprise Evaluation Edition (64-bit) on Windows 10 Pro N 10.0 <X64> (Build 18362: ) (Hypervisor)
Cadena de conexión para Azure SQL Database
Colocamos un ejemplo de como luce una cadena de conexión para una base de datos en Azure. Esta la puedes obtener desde el portal de Azure en la sección _Settings > Connections strings _ del recurso de SQL Database si tienes acceso al portal y unicamente es necesario sustituir la contraseña. En este ejemplo se muestran entre llaves {} los que deben remplazarse.
Nota Observa que para las bases en Azure llevan un subdominio de database.windows.net y es necesario especificar el protocolo y puerto.
Server=tcp:{midbseserverenazure}.database.windows.net,1433;Initial Catalog=MyDbAzure;Persist Security Info=False;User ID={benjamin};Password={your_password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;
Cadena de conexión MySQL
- Ejemplo de cadena de conexión para MySQL
server=localhost;database=sakila;user id=root;password=password;port=3304
-
Paquete de Nuget es : MySql.Data y el espacio de nombres
MySql.Data.MySqlClient
. -
Para poder crear esta cadena de conexión se uso el código
MySqlConnectionStringBuilder builder = new MySqlConnectionStringBuilder()
{
Server = "localhost",
Database = "sakila",
UserID = "root",
Password = "password",
Port = 3304,
};
Console.WriteLine(builder.ConnectionString);
Cadena de conexión Oracle
- Ejemplo de cadena de conexión para Oracle
USER ID=hr;PASSWORD=hr;PERSIST SECURITY INFO=True;DATA SOURCE=192.168.100.147:1521/orcl;CONNECTION TIMEOUT=250
-
Paquete de Nuget es : Oracle.ManagedDataAccess.Core y el espacio de nombres
Oracle.ManagedDataAccess.Client
. -
Para poder crear esta cadena de conexión se uso el código
OracleConnectionStringBuilder builder = new OracleConnectionStringBuilder();
builder.DataSource = "192.168.100.147:1521/orcl";
builder.UserID = "user";
builder.PersistSecurityInfo = true;
builder.Password = "password";
builder.ConnectionTimeout = 250;
Console.WriteLine(builder.ConnectionString);
- Para validar la cadena de conexión y verificar la version de una base de datos Oracle podemos ejecutar el siguiente código de C#.
using (OracleConnection connection = new OracleConnection(builder.ConnectionString))
{
try
{
connection.Open();
Console.WriteLine("Conexión válida");
OracleCommand command = new OracleCommand("SELECT BANNER FROM v$version;", connection);
OracleDataReader reader = command.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
Console.WriteLine(reader.GetString(0));
}
}
else
{
Console.WriteLine("Sin resultados.");
}
reader.Close();
}
catch (Exception exception)
{
Console.WriteLine(exception.Message);
}
}
A continuación se muestra un ejemplo de salida
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production
PL/SQL Release 11.2.0.2.0 - Production
"CORE 11.2.0.2.0 Production"
TNS for Linux: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production
Cadena de conexión Firebird
- Ejemplo de cadena de conexión para Firebird
initial catalog=MyDB;user id=user;port number=556;password=Admin;character set=utf8
-
Paquete de Nuget es : FirebirdSql.Data.FirebirdClient y el espacio de nombres
FirebirdSql.Data.FirebirdClientt
. -
Para poder crear esta cadena de conexión se uso el código
FbConnectionStringBuilder builder = new FbConnectionStringBuilder();
builder.Database = "MyDB";
builder.UserID = "user";
builder.Port = 556;
builder.Password = "Admin";
builder.Charset = "utf8";
Console.WriteLine(builder.ConnectionString);
Cadena de conexión SQLite
- Ejemplo de cadena de conexión para SQLite
data source=blogging.db
-
Paquete de Nuget es : System.Data.SQLite.Core y el espacio de nombres
System.Data.SQLite
. -
Para poder crear esta cadena de conexión se uso el código
SQLiteConnectionStringBuilder builder = new SQLiteConnectionStringBuilder();
builder.DataSource = "blogging.db";
Console.WriteLine(builder.ConnectionString);
Cadena de conexión PostgreSQL
- Ejemplo de cadena de conexión para PostgreSQl
Host=localhost:49153;Username=postgres;Password=postgrespw;Database=pagila
-
Paquete de Nuget es : Npgsql y el espacio de nombres
Npgsql
. -
Para poder crear esta cadena de conexión se uso el código
var builder = new NpgsqlConnectionStringBuilder();
builder.Host = "localhost:49153";
builder.Username = "postgres";
builder.Password = "postgrespw";
builder.Database = "pagila";
builder.ApplicationName = "";
Console.WriteLine(builder.ConnectionString);
Version de PostgtrsSQL
Para validar la conexion y verificar la versión de PostgreSQL puedes usar el siguiente codigo de ejemplo:
using NpgsqlConnection connection = new NpgsqlConnection(builder.ConnectionString);
try
{
connection.Open();
Console.WriteLine("Conexión válida");
NpgsqlCommand command = new NpgsqlCommand("SELECT VERSION();", connection);
NpgsqlDataReader reader = command.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
Console.WriteLine(reader.GetString(0));
}
}
reader.Close();
}
catch (Exception exception)
{
Console.WriteLine(exception.Message);
}
Si guestas ver una video de como crear la cadena de conexión con PostgresSQL
Conclusión
Es importante mencionar que para cada base de datos hay una gran cantidad de parámetros que se pueden agregar a una cadena de conexión y estos cambian de dependiendo con cada proveedor. Muchos de ellos tienes un nombre que permite determinar su función pero de otros es necesario que veas la documentación del proveedor. En Visual Studio o Visual Studio Code puedes ver los parámetros que contiene cada base de datos usando Intellisense o Presionando F12 para ir a la definición del tipo.