如何使用Microsoft技术开发dbms独立应用程序?

时间:2012-05-06 19:08:45

标签: c# .net silverlight database

我需要以这样的方式编写应用程序,它不应该担心传入的DBMS。它可以是Oracle,PostgreSQL,MySql等。

本地dbms将使用我将加载数据的SQL Server 2008。

需要/计划做什么...

  1. 用户有文本框,他可以在本地数据库/配置文件中为每个可能的dbms创建/保存连接字符串vales。
  2. 应用程序然后应该使用它来形成连接字符串并一次连接到传入数据库,或者如果可能的话同时连接到传入数据库。
  3. 检索值并将它们放在本地数据库中。
  4. 无需将数据写入传入的数据库。仅限单向。
  5. 简而言之,一个独立于数据库的应用程序,只能根据设置的查询读取值并将它们放在指定的数据库中。

    是否可以这样做或听起来神奇?

    我可以开发任何解决方案/样品/技术吗?

    应用程序基于Silverlight + ASP.NET技术。

4 个答案:

答案 0 :(得分:3)

您应该搜索和研究设计模式。看看这个link。还可以查看LLBLGen
如果您想选择自己的解决方案,那么您必须分层工作。定义松散耦合的数据访问层(DAL)。一种方法是使用接口。定义用于数据库连接的接口,然后让DBMS的每个类实现它。然后,您可以在以下行中获取数据库连接字符串。
Source

public static IDbConnection GetConnection(string connectionName)
    {
      ConnectionStringSettings ConnectString = ConfigurationManager.ConnectionStrings[connectionName];
//Use a Factory class, to which you pass the ProviderName and 
//it will return you object for that particular provider, you will have to implement it
      DbProviderFactory Factory = DbProviderFactories.GetFactory(ConnectString.ProviderName);
      IDbConnection Connection = Factory.CreateConnection();
      Connection.ConnectionString = ConnectString.ConnectionString;
      return Connection;
    }

然后你就可以使用它:

public static DataTable GetData()
{
  using (IDbConnection Connection = GetConnection("SiteSqlServer"))
  {
    IDbCommand Command = Connection.CreateCommand();
    Command.CommandText = "DummyCommand";
    Command.CommandType = CommandType.StoredProcedure;

    Connection.Open();

    using (IDataReader reader = Command.ExecuteReader())
    {
      DataTable Result = new DataTable();
      Result.Load(reader);
      return Result;
    }
  }
}

答案 1 :(得分:2)

这是相当基本的要求,您应该能够使用对象关系映射框架之一轻松实现它。

如果我推荐一个 - 使用NHibernate。

Silverlight + ASP.NET与您持久保存数据的方式无关,只要您将其保留在服务器端即可。对于Silverlight应用程序,您还需要一些WCF Web服务来在客户端和服务器之间进行通信。

答案 2 :(得分:0)

与其他答案一致,我强烈建议您查看以下问题https://stackoverflow.com/questions/132676/which-orm-for-net-would-you-recommend它应该给你很好的分解ORM。

答案 3 :(得分:0)

以其他答案所说的为基础。以这种方式思考你的问题。

你有“前端(asp.net/silver light)”< - > “数据存储”

你想要的是中间的一步

“前端”< - > “数据库无知层”< - > “数据存储”

这个中间层可能是一个ORM,但所有ORM确实是(除了数以千计的代码行和多年的精炼经验之外)是存储库和工作单元格的实现。