我需要在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