[英]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.