【问题标题】:how a dataset is disconnected?数据集如何断开连接?
【发布时间】:2014-11-15 10:48:35
【问题描述】:

我真的对 ado.net 中的数据集概念感到困惑,即它已断开连接。

如果假设我们使用数据适配器发出更新 sql 语句并且 里面的数据集

string stUpdate=  "update customer set name = 'Faizan' where ID = 5"
SqlDataAdapter da= new SQLDataAdapter(stUpdate, SQLCONNECTIONOBJECT)
DataSet ds = new Dataset
da.Fill(ds, "tablename")

我数据库中的基础客户表实际上已更新。 那么 DATASET 以什么方式断开连接。执行更新操作并更新客户表

【问题讨论】:

    标签: c# sql dataset dataadapter


    【解决方案1】:

    通过比较 dataset 和 datareader 可以更好地理解这一点

    using(SqlConnection con = Dal.GetConnection())
    {
      while(reader.Read())
      {
         // some code
      }
    }
    

    连接在上面的代码中是持久的,就像在数据集中它建立连接、获取数据和关闭连接一样!所以它断开了!!!

    【讨论】:

      【解决方案2】:

      disconnected 一词更多地描述了一种架构模式。如果您深入了解实现细节,那么一切看起来/都已连接。

      断开连接一词用于传达其不需要实时数据库连接的设计属性。您填写您的数据集,对其进行更改,将数据集保存到磁盘,停止您的应用程序,一天后启动您的应用程序,从磁盘读取数据集并使用 http://msdn.microsoft.com/en-us/library/system.data.common.dbdataadapter(v=vs.110).aspx 将您昨天所做的更改写入数据存储区。

      来自优秀的约翰帕帕this excerpt from his msdn article series Data Points

      您的情况将决定何时何地使用 DataSet 与 DataReader。例如,DataSet 的断开连接特性允许将其转换为 XML 并在适当的情况下通过 HTTP 通过网络发送。这使其成为从业务层对象和 Web 服务返回的理想工具。 DataReader 不能被序列化,因此不能在只有字符串 (XML) 数据可以去的物理层边界之间传递。

      虽然它看起来“已连接”到您的数据库,但我可以稍微扩展您的示例以明确“已连接”是相对的。最好讲依赖,DataSet 只依赖一个 DataAdapter。

      StorageEnum store = Storage.Oracle;
      string stUpdate=  "update customer set name = 'Faizan' where ID = 5";
      DbDataAdapter da = null;
      swith (store)
      {
          case StorageEnum.SqlServer:
             da= new SQLDataAdapter(stUpdate, SQLCONNECTIONOBJECT)
          break;
          case StorageEnum.Oracle:
             da= new OracleDataAdapter(stUpdate, ORACLECONNECTIONOBJECT)
          break;
          default:
             da= new OleDBDataAdapter(stUpdate, OLEDBCONNECTIONOBJECT)
          break;
      };
      DataSet ds = new Dataset();
      da.Fill(ds, "tablename")
      

      如您所见,为更新/插入/删除和选择支持多个数据库所需的唯一更改只需要更改使用的 DataAdapter。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-04-15
        • 1970-01-01
        • 2014-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多