The best connection creation mechanism in my experience is a combination of DependencyInjectionand ConnectionFactory.
Advantages: Multi fold:
- , , ( Connection Factory)
( ):
IDBConnection :
[Inject]
public IDBConnection Connection {get; set;}
DI, Ninject:
Bind<IDBConnection>().ToMethod(ctx =>
ConnectionFactory.CreateDbConnection("DefaultConnection"));
DBConnection Factory :
Factory :
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=<Value>;Initial Catalog=<Value>;User Id=<Value>;Password=<Value>" providerName="System.Data.SqlClient" />
</connectionStrings>
DefaultConnection, SqlClient, , Oracle, MySql
using System;
using System.Data.Common;
public static class ConnectionFactory
{
public static DbConnection CreateDbConnection(string connectionIdentifier)
{
var providerNameValue = ConfigurationManager.ConnectionStrings[connectionIdentifier].ProviderName;
var connectionStringValue = ConfigurationManager.ConnectionStrings[connectionIdentifier].ConnectionString;
DbConnection connection;
if (connectionStringValue == null) return null;
try
{
var factory = DbProviderFactories.GetFactory(providerNameValue);
connection = factory.CreateConnection();
if (connection != null)
connection.ConnectionString = connectionStringValue;
}
catch (Exception ex)
{
connection = null;
}
return connection;
}
}
:
using(Connection)
{
...
}
as-is, no using required