2014-01-21 105 views
1

讓我通過說我對C#和數據庫實現有點新鮮感。我試圖創建一些將連接到數據庫的代碼,但數據庫的類型可能因SQL Server,SQL Server CE以及後來的MySQL等不同而有所不同。我試圖使用DbConnection,DbCommandDbDataAdapter等類來實現代碼,這些類是所有這些類型的數據庫類的基類。但是,我很難設置它。使用相同的代碼連接到SQL Server和SQL Server CE數據庫

我試過使用DatabaseFactory.CreateDatabase("connectionString"),但它要我connectionStringapp.config文件,但我不希望程序設置的方式。

我也試過DbProviderFactories.GetFactory(providerStr)但爲了得到正確的providerStr,我需要知道我正在使用哪個數據庫。

基本上我想要它,以便不管我使用什麼類型的數據庫,代碼仍然可以工作。有沒有簡單的方法來做到這一點,或者有可能嗎?任何幫助表示讚賞。

+1

對服務器有任何控制權?在此設置中,我的首選是連接到單個服務器作爲主數據源,並使用鏈接的服務器連接其他數據源。讓您可以通過鏈接的服務器從任何地方訪問數據,並只連接到一臺服務器。 MySQL和MSSQL的語法不同,這隻會讓你使用MSSQL(假設你設置了鏈接服務器) – Twelfth

+0

我同意,這是我認爲甚至有可能在同一連接中鏈接它們的唯一途徑。 – 2014-01-22 00:16:47

回答

0

我得出結論,如果沒有完全指定要連接的數據庫類型,就沒有辦法做到這一點。所以我的答案是添加不同類型數據庫的枚舉,並使用DbProviderFactories.GetFactory(providerStr)創建DbProviderFactory實例。這裏有一些代碼,如果任何人有興趣或試圖做我在做什麼。

DbProviderFactory dbFactory; 

    private DatabaseTypes m_dbType; 
    public DatabaseTypes DbType 
    { 
     get { return m_dbType; } 

     set 
     { 
      m_dbType = value; 
      dbFactory = DbProviderFactories.GetFactory(DatabaseProvider.GetDatabaseProvider(m_dbType)); 
     } 
    } 

在另一個文件中我定義了枚舉和DatabaseProvider類。它看起來像這樣:

public enum DatabaseTypes 
    { 
     SQL, 
     SQL_CE 
    } 

public static class DatabaseProvider 
{ 
    private const string SQL_Provider = "System.Data.SqlClient"; 
    private const string SQL_CE_Provider = "System.Data.SqlServerCe.3.5"; 

    public static string GetDatabaseProvider(DatabaseTypes dbType) 
    { 
     switch (dbType) 
     { 
      case DatabaseTypes.SQL_CE: 
       return SQL_CE_Provider; 

      case DatabaseTypes.SQL: 
      default: 
       return SQL_Provider; 
     } 
    } 
} 

現在,如果我想添加其他數據庫類型,我只是將它添加到枚舉,得到添加其他供應商的字符串,並把另一種情況在switch語句!我現在需要做的就是弄清楚我將如何處理查詢。