数据集是如何断开的?

时间:2014-09-21 09:14:36

标签: c# sql dataset dataadapter

我对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以什么方式断开连接。更新操作执行和客户表更新

2 个答案:

答案 0 :(得分:1)

术语已断开连接描述了更多的架构模式。如果你了解实现细节,一切看起来/都是连接的。

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

来自优秀的John Pappa 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。

答案 1 :(得分:0)

通过将数据集与datareader

进行比较,可以最好地理解这一点
using(SqlConnection con = Dal.GetConnection())
{
  while(reader.Read())
  {
     // some code
  }
}

连接在上面的代码中都是持久的,其中在数据集中它建立连接,获取数据和数据。全部关闭连接!所以它断开连接!!!