簡體   English   中英

動態選擇SQL Server或Oracle數據庫

[英]Dynamically choose SQL Server or Oracle database

我有一個允許我的用戶對他們選擇的數據庫運行查詢的應用程序。 該數據庫可以是SQL Server或Oracle。 此方法從另一個類接受兩個參數,第一個參數是用戶選擇的數據庫的連接字符串,第二個參數是數據庫類型。 那部分工作正常。 我想做的是減少我需要編寫的代碼,而不是一遍又一遍地鍵入查詢和連接內容。 所以,我想做這樣的事情。 顯然,這是行不通的,但是我對大多數解決方案持開放態度。

public void createTable(string connectstring, string rdbms)
{
    if (rdbms == "oracle")
    {
        con = new OracleConnection(connectionString);
        con.Open();
        OracleCommand query = con.CreateCommand();
    }
    else if (rdbms == "SQL Server")
    {
        con = new SqlConnection(connectionString);
        con.Open();
        SqlCommand query = con.CreateCommand();
    }
    else 
    {
      // broke
    }

    query.CommandText = "CREATE TABLE " + RndName + 
       " (Col0 Varchar(10),Col1 Varchar(10), Col2 Varchar(10))";
    query.ExecuteNonQuery();

    con.Close();
    executeInsertTransactions(connectstring);
}

通常通過接口解決此問題。 可能有以下常見接口:

IConnection IDataProvider IRepository

使用MySql數據庫實現接口,例如類MySqlConnection:IConnection。 對於Oracle,添加類MsOracleConnection:IConnection。

理想情況下,您應該將所有功能抽象為通用接口。 您將必須為要支持的每個數據庫/存儲引擎提供實現。 在運行時,您將使用IoC容器和DI原理來設置當前實現。 所有子依賴項都將使用作為參數傳遞給構造函數(或屬性或方法)的接口

您可以利用框架的DbProviderFactory並使用獲得的Db*類來創建更多抽象代碼。

Dim con As System.Data.IDbConnection
Dim cmd As System.Data.IDbCommand                        
                       Select Case ConDBType
                            Case TypeDatabase.SqlServer
                                con = New OleDbConnection(CN.ConnectionString)
                                cmd = New OleDbCommand
                            Case TypeDatabase.MySql
                                con = New MySqlConnection(CNMySql.ConnectionString)
                                cmd = New MySqlCommand
                            Case TypeDatabase.Access
                                Call InitNameing()
                                ConDBAccess.DataSource = PreparToRootNameing() & "\T" & NAME_SYSTEMDB
                                con = New OleDbConnection(CN.ConnectionString)
                                cmd = New OleDbCommand
                       End Select
                       cmd.Connection = con
                       con.Open()
                       cmd.CommandText = SQLUpdate
                       cmd.ExecuteNonQuery()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM