我需要在Asp.Net和C#中創建基於Web的數據庫應用程序,該應用程序可用於所有數據庫提供程序,如SQL Server,MySQL等。如果客戶端有SQL Server,程序應該使我的Web應用程序與SQL Server一起工作,如果客戶端有MySQL,它也應該與MySQL一起工作。創建支持多個後端的Web應用程序
是否有任何工具可以做到這一點?或者我是否應該遵循任何編程過程或方法來實現它?
所以引導我實現上述場景。
我需要在Asp.Net和C#中創建基於Web的數據庫應用程序,該應用程序可用於所有數據庫提供程序,如SQL Server,MySQL等。如果客戶端有SQL Server,程序應該使我的Web應用程序與SQL Server一起工作,如果客戶端有MySQL,它也應該與MySQL一起工作。創建支持多個後端的Web應用程序
是否有任何工具可以做到這一點?或者我是否應該遵循任何編程過程或方法來實現它?
所以引導我實現上述場景。
我會用dapper這是一個微型ORM的.Net。它支持sqlite,SQL Server CE,Firebird,Oracle,MySQL,PostgreSQL和SQL Server。
就我個人而言,我一直非常喜歡使用Dapper,它實際上是由Stack Overflow開發和使用的。
使用SimpleData http://simplefx.org/simpledata/docs/超級好用,並支持: SQL Server 2005和更高 SQL Server精簡版4.0 甲骨文 VistaDB的 的MySQL 4.0及更高版本 sqlite的3.0和更高版本 PostgreSQL的 SQLAnywhere的 Informix的 Microsoft Access 2000中,2003和2007
爲了保持外部系統(如數據庫)的獨立性,您需要將解決方案設計爲僅對接口說話。然後,您可以使用多種技術(包括依賴注入)來決定在運行時使用哪個實現。
儘管如此,我們只是使用工廠。
首先要決定你的數據庫應該做什麼。簡單的例子 - 我們將存儲或檢索一個整數。所以首先讓我們定義該接口。我爲了簡單而忽略了異步的東西 - 但是當你與數據庫交談時,你真的很想要這樣的東西。
public interface IDatabase{
void Store(int value);
int Get();
}
所以現在我們已經有了一些我們的調用代碼可以用來引用任何類型的數據庫。
下一步我們需要不同類型的類每個DB
public class SqlServerDB : IDatabase{
public void Store(int value){//store it}
public void Get(){//get it}
}
public class MySqlDB : IDatabase{
public void Store(int value){//store it}
public void Get(){//get it}
}
同樣,你不希望調用代碼知道實現,所以你不能只是一個新的實例化對象。相反,您需要構建一個知道不同類型數據庫的類。
我在這裏使用了一個字符串,但是您應該在實際代碼中使用枚舉。
public static class DatabaseFactory{
public static IDatabase GetDatabase(string dbName){
switch(dbName){
case "sqlserver":
return new SqlServerDB();
case "mysql":
return new MySqlDB();
default:
throw new ArgumentException("Don't know about that DB");
}
}
}
現在您的調用代碼不必隨數據庫一起更改。如果你有一個配置對象(比如內置的.NET對象),你可以很容易地改變正在使用的數據庫。
IDatabase myDB = DatabaseFactory.GetDatabase(Config.DBName);
myDB.Store(191);
int result = myDB.Get();
//result will equal 191!
調查MVC然後有一個問題的分離。 –
MVC將是一個不錯的選擇,但如果你想堅持使用Asp.net,那麼你可以使用具有通用數據庫函數(如DBCommand,DBReader,DBAdapter等)的Microsoft企業庫,只需傳遞正確的數據庫並使用這個通用的libarary即可。我在一個同時擁有SQL和Oracle數據庫的項目中使用了這個工具 – Sushil
您還希望避免在應用程序中直接使用數據庫查詢。您應該使用存儲過程,以便從應用程序傳遞的過程名稱和參數相同,而不管正在使用哪個數據庫。 – Tim