如何在不使用多个对象的情况下连接到 VB.net 中的 OLEDB 和 ODBC

How to connect to OLEDB and ODBC in VB.net without using multiple objects

使用 ADODB 时,我能够使用一个连接字符串,它可以是 OLEDB 提供程序或 ODBC 连接,并使用相同的连接对象。转换为 ADO.NET 并使用 OleDB.OleDBConnection 后,我发现您无法指定 ODBC 连接字符串,因为 OLE DB 的 .NET Framework 数据提供程序不支持 ODBC (MSDASQL) 的 OLE DB 提供程序。我不想使用多个连接对象(System.Data.OLEDB和System.Data.ODBC)进行数据访问,因为我们的程序在数百个地方都有数据访问。人们如何在不使用多个连接对象的情况下允许连接到数据库?谢谢!

您可以使用 DbProviderFactory 来抽象数据访问。它允许您为您抛给它的每个连接字符串对象获取正确连接类型的实例。

给定以下连接字符串配置:

<configuration>
  <connectionStrings>
    <clear/>
    <add name="NorthwindSQL" 
     providerName="System.Data.SqlClient" 
     connectionString=
     "Data Source=MSSQL1;Initial Catalog=Northwind;Integrated Security=true"
    />
    <add name="NorthwindAccess" 
     providerName="System.Data.OleDb" 
     connectionString=
     "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\Northwind.mdb;"
    />
    <add name="NorthwindODBC" 
     providerName="System.Data.Odbc"
     connectionString="Driver=ODBCDriver;server=ODBCServer;"
  </connectionStrings>
</configuration>

这将为您提供适当的连接:

//Read connection string
ConnectionStringSettings setting = ConfigurationManager.ConnectionStrings["NorthwindAccess"];

//Create connection
DbProviderFactory factory = DbProviderFactories.GetFactory(setting.ProviderName);
using(DbConnection connection = factory.CreateConnection())
{
    connection.ConnectionString = setting.ConnectionString;
    // Use the connection ...
    DbCommand command = connection.CreateCommand();
    // ...

}