Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用Microsoft技术开发独立于dbms的应用程序?_C#_.net_Silverlight_Database - Fatal编程技术网

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

C# 如何使用Microsoft技术开发独立于dbms的应用程序?,c#,.net,silverlight,database,C#,.net,Silverlight,Database,我需要以这样一种方式编写应用程序,它不应该担心传入的DBMS。可以是Oracle、PostgreSQL、MySql等 本地dbms将使用SQL Server 2008,我将在其中加载数据 需要/计划做什么 用户有文本框,可以在其中为每个可能的dbms在本地数据库/配置文件中创建/保存连接字符串值 然后,应用程序应该使用它来形成连接字符串,并连接到传入的数据库,如果可能的话,可以一次连接一个数据库,也可以同时连接一个数据库 检索值并将其放入本地数据库中 无需将数据写入传入数据库。仅单向 简而言之,

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

本地dbms将使用SQL Server 2008,我将在其中加载数据

需要/计划做什么

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

    有可能做到这一点或听起来很神奇吗

    有什么解决方案/样本/技术我可以开发吗


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

    这是一个非常基本的要求,您应该能够使用一个对象关系映射框架轻松地实现它

    如果我推荐一种,请使用NHibernate


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

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

    然后你可以像这样使用它:

    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;
        }
      }
    }
    

    与其他答案一样,我强烈建议您看看下面的问题,它应该能很好地分解ORM。

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

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

    你想要的是中间的一步

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


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

    +1:如果你不想有ORM的开销,你宁愿自己编写,那么这将是一个开始的好地方。谢谢大家。我现在正在看这本书,也谢谢你提供的样品。看起来不错。。繁忙的日程安排和作业:D…迟到reply@dwerner如果您现在仍在编写自己的orm/数据访问代码,您就不是很聪明:您将浪费大量时间,遇到其他人已经解决的相同错误,并且您必须通过更新来支持自己的代码。@Frans Bourna-我同意这种情况,因为为什么要重新发明轮子,对吗?在.NET这样的平台上,NHibernate做得很好。在其他一些较新的平台上,比如Node.js,它的解决方案并没有让我满意,所以我在那里启动了一个项目。最后,是的,我同意你不应该重新发明轮子,除非所有其他轮子都不能让你满意。+1:ORM在很多情况下都是你自己想要实现的,所以这可能是一个巨大的胜利和时间节约。另一方面,对于初学者来说,ORM可能很复杂。我也可以自己推荐NHibernate。
    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;
        }
      }
    }