Làm thế nào để bạn xây dựng một DbConnection dựa trên một tên nhà cung cấp ?ASP.NET: Làm thế nào để tạo một kết nối từ web.config ConnectionString?
mẫu tên nhà cung cấp s
- System.Data.SqlClient
- System.Data.OleDb
- System.Data.Odbc
- FirebirdSql.Data.FirebirdClient
tôi có chuỗi kết nối được lưu trữ trong tệp web.config của máy chủ IIS của tôi:
<connectionStrings>
<add name="development"
connectionString="Provider = IBMDA400; Data Source = MY_SYSTEM_NAME; User Id = myUsername; Password = myPassword;"
providerName="System.Data.OleDb" />
<add name="live"
connectionString="usd=sa;pwd=password;server=deathstar;"
providerName="System.Data.Odbc" />
<add name="testing"
connectionString="usd=sa;pwd=password;server=deathstar;"
providerName="System.Data.SqlClient" />
<add name="offline"
connectionString="Server=localhost;User=SYSDBA;Password=masterkey;Charser=NONE;Database=c:\data\mydb.fdb"
providerName="FirebirdSql.Data.FirebirdClient"/>
Bạn có thể thấy tất cả họ đều sử dụng các nhà cung cấp khác nhau. Khi nói đến thời gian cho tôi để tạo ra một kết nối, tôi phải biết những loại DbConnection để tạo ra, ví dụ:
- SqlConnection
- OleDbConnection
- OdbcConnection
- FbConnection
Các mục nhập connectionStrings chứa một nhà cung cấp Name, nhưng đây không phải là tên của các lớp hậu duệ DbConnection, nhưng có vẻ như là một không gian tên
Làm cách nào để tôi biến cấu trúc DbConnection dựa trên chuỗi providerName?
public DbConnection GetConnection(String connectionName)
{
//Get the connectionString infomation
ConnectionStringSettings cs =
ConfigurationManager.ConnectionStrings[connectionName];
if (cs == null)
throw new ConfigurationException("Invalid connection name \""+connectionName+"\");
//Create a connection based on the provider
DbConnection conn = new DbConnection();
}
Đây chính xác là những gì cần thiết. Thành phần bí mật là "tên nhà cung cấp" được sử dụng ở đâu đó trong hệ thống, và đó là bộ sưu tập DbProviderFactories. Mỗi nhà cung cấp đăng ký chính nó với DbProviderFactories; đó là cách bạn tìm thấy nó. –