Observação: Esta resposta é relevante se você decidir usar a funcionalidade básica do ADO.NET 2 em vez de um ORM (como Entity Framework ou NHibernate) ou LINQ to SQL.
Vamos supor que você tenha uma string de conexão definida em seu
app.config
:<connectionStrings>
<add name="SomeConnection"
providerName="System.Data.SqlClient"
connectionString="..." />
</connectionStrings>
Observe a presença do
providerName
atributo e seu valor. Você também pode colocar um valor para outro provedor de banco de dados, por exemplo System.Data.SQLite
. (Observe que provedores não padrão, ou seja, aqueles que não estão no .NET Framework por padrão, precisam ser registrados primeiro, seja em
app.config
ou no machine.config
da máquina cliente .) Agora, você pode trabalhar com o banco de dados especificado de maneira totalmente independente do provedor da seguinte maneira:
using System.Configuration; // for ConfigurationManager
using System.Data; // for all interface types
using System.Data.Common; // for DbProviderFactories
var cs = ConfigurationManager.ConnectionStrings["SomeConnection"];
// ^^^^^^^^^^^^^^^^
var factory = DbProviderFactories.GetFactory(cs.ProviderName);
// ^^^^^^^^^^^^^^^
using (IDbConnection connection = factory.CreateConnection())
{
connection.ConnectionString = cs.ConnectionString;
// ^^^^^^^^^^^^^^^^^^^
connection.Open();
try
{
using (IDbCommand command = connection.CreateCommand())
{
... // do something with the database
}
}
finally
{
connection.Close();
}
}
Observe como esse código funciona apenas com tipos de interface. O único lugar onde você indica um provedor de banco de dados específico é através do
providerName
valor do atributo no app.config
Arquivo. (Marquei todos os lugares onde uma configuração de app.config
é obtido com ^^^
s.) Leitura adicional:
-
Codificação genérica com as classes base e fábricas do ADO.NET 2.0:
semelhante à minha resposta, mas entra em mais detalhes.
-
ADO.NET Managed Providers e DataSet Developer Center:
inclui, entre outras coisas, um índice de provedores de banco de dados ADO.NET disponíveis.