在連接到多個可能的數據源(與數據庫無關)方面,上述每種數據庫連接方法在C#中的主要優點是什麼?此外,在可能提供全面最佳性能的性能方面呢?DbConnection vs OleDbConnection與OdbcConnection
最後是否有什麼原因可以避免數據庫不可知應用程序的特定方法?
我問的原因是因爲我的應用程序目前使用Ole和我有幾個問題與使用工廠連接到某些數據庫,因此正在尋找替代品。我聽說Odbc比Ole更慢,但是有沒有背後的真相,在真實世界的應用程序中它真的很明顯嗎?
我之所以對這個問題的興趣如下:
我爲我的當前項目國家的要求,我必須有一個能夠連接到任何數據庫,但不說的先驗知識的工作數據訪問層數據庫。因此,我無法在連接方面硬編碼任何特定數據庫的任何內容。在每個給定數據庫上運行方言特定語句已經使用sql查詢工廠類型概念進行了處理。綁定變量的替換和格式也一樣。
更新:現在,我現在有一個正在使用ADO.net和數據庫提供程序工廠的代碼的工作版本。這意味着我使用Adam Houldsworth建議的基類。提供者在providerName屬性下的連接字符串中指定。連接字符串存儲在app.config中,可以被我的數據庫連接類檢索。如果安裝了正確的驅動程序(例如npgsql或Oracle的odac軟件包),那麼工廠就可以正常工作。下面是我的代碼示例,顯示了使用提供程序工廠的連接對象的基本構造函數。
private readonly DbFactoryBindVariables m_bindVariables;
private readonly DbProviderFactory m_provider;
private string m_connectionString = String.Empty;
private readonly string m_providerName = String.Empty;
private DbConnection m_dbFactoryDatabaseConnection;
/// <summary>
/// Default constructor for DbFactoryDatabaseConnection.
/// </summary>
public DbProviderFactoryConnection()
{
m_providerName = ConfigurationManager.ConnectionStrings["ApplicationDefault"].ProviderName;
m_provider = DbProviderFactories.GetFactory(m_providerName);
m_dbFactoryDatabaseConnection = m_provider.CreateConnection();
m_connectionString = ConfigurationManager.ConnectionStrings["ApplicationDefault"].ConnectionString;
m_dbFactoryDatabaseConnection.ConnectionString = m_connectionString;
m_bindVariables = new DbFactoryBindVariables(m_dialect.ToLower(), DbFactoryBindSyntaxLoader.Load(this));
}
它可能需要添加類似於以下到的app.config或web.config中的東西,如果它已經不存在在machine.config您所選擇的.NET Framework版本。需要
<system.data>
<DbProviderFactories>
<add name="Npgsql Data Provider"
invariant="Npgsql"
support="FF"
description=".Net Framework Data Provider for Postgresql Server"
type="Npgsql.NpgsqlFactory, Npgsql, Version=2.0.1.0, Culture=neutral,
PublicKeyToken=5d8b90d52f46fda7" />
</DbProviderFactories>
</system.data>
連接字符串:配置應用程序的客戶端版本時
<add name="ApplicationDefault" connectionString="DATA SOURCE=TNSNAME;PASSWORD=PASS;USER ID=USER;" providerName="Oracle.DataAccess.Client;"/>
在這個階段,我現在可以完全數據庫無關提供了正確的連接字符串使用。
爲有興趣的人添加了更新。 – CSharpened 2012-04-12 08:44:58