【问题标题】:how to develop dbms independent application using Microsoft tech?如何使用微软技术开发 dbms 独立应用程序?
【发布时间】:2012-05-06 19:08:45
【问题描述】:

我需要以一种无需担心传入 DBMS 的方式编写应用程序。可以是Oracle、PostgreSQL、MySql等。

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

需要/计划做什么......

  1. 用户有文本框,他可以在其中为每个可能的 dbms 创建/保存本地数据库/配置文件中的连接字符串值。
  2. 然后应用程序应该使用它来形成连接字符串,并一次连接一个或同时连接到传入数据库(如果可能)。
  3. 检索值并将它们放入本地数据库。
  4. 无需将数据写入传入数据库。仅 1 路。

简而言之,一个独立于数据库的应用程序,仅基于一组查询读取值并将它们放入指定的数据库中。

是否有可能做到这一点或听起来很神奇?

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

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

【问题讨论】:

    标签: c# .net silverlight database


    【解决方案1】:

    您应该搜索和研究设计模式。看看这个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:如果您不想拥有 ORM 的开销,或者您宁愿自己编写,那么这将是一个开始的好地方。
    • 谢谢every1。我现在正在看这本书,也感谢您提供的示例模式。看起来不错.. 繁忙的日程安排与作业..:D..迟到的回复
    • @dwerner 如果您今天仍在编写自己的 orm/数据访问代码,那么您并不聪明:您会浪费很多时间,遇到其他人已经解决的相同错误,并且您必须通过更新来支持您自己的代码。
    • @Frans Bourna - 我同意这种情况,因为为什么要重新发明轮子,对吧?在 .NET 等平台中,NHibernate 已经很好地完成了这一点。例如,在其他一些较新的平台上,比如 Node.js,它并没有得到令我满意的解决,所以我在那里建立了一个项目来解决这个问题。最后,是的,我同意你不应该重新发明轮子,除非所有其他轮子都没有让你满意。
    【解决方案2】:

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

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

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

    【讨论】:

    • +1:在很多情况下,ORM 基本上都是您自己想要实现的,所以这可能是一个巨大的胜利和节省时间。另一方面,ORM 对于初学者来说可能很复杂。我自己也可以推荐 NHibernate。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      你想要的是中间的一步

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-12
        • 1970-01-01
        • 2019-04-20
        • 1970-01-01
        • 2019-04-18
        • 1970-01-01
        • 2011-07-20
        相关资源
        最近更新 更多