知识大全 ADO.NET 2.0中的DataSet和DataTable

Posted

篇首语:我自横刀向天笑,去留肝胆两昆仑。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 ADO.NET 2.0中的DataSet和DataTable相关的知识,希望对你有一定的参考价值。

ADO.NET 2.0中的DataSet和DataTable  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  John Papa的一篇文章《DataSet and DataTable in ADO NET 》 详细介绍了ADO Net 的一些新功能和特性 对于利用ADO NET开发的程序员来说 是值得关注的 现介绍如下

  一 功能增强的DataTable

  在ADO NET x中 DataSet完全掩盖了DataTable的光芒 并非DataTable自身功能不够强大 实则是比较DataSet而言 很多功能在 x版本中受到了限制 例如Merge功能 在ADO NET x版本中 如果要合并两个表 只有是通过DataSet的Merge方法 才能完成 代码如下

  string sqlAllCustomers = SELECT * FROM Customers

  string cnStr = @ Data Source= Initial Catalog=northwind Integrated Security=True

  

  

  using (SqlConnection cn = new SqlConnection(cnStr))    cn Open();    SqlCommand cmd = new SqlCommand(sqlAllCustomers cn);    SqlDataAdapter adpt = new SqlDataAdapter(cmd);    DataTable dtCust = new DataTable( Customers );    adpt Fill(dtCust );    dtCust PrimaryKey = new DataColumn[]dtCust Columns[ CustomerID ]; 

  DataTable dtCust = dtCust Clone();    DataRow row = dtCust NewRow();    row [ CustomerID ] = ALFKI ;    row [ CompanyName ] = Some Company ;    dtCust Rows Add(row );

  DataRow row = dtCust NewRow();    row [ CustomerID ] = FOO ;    row [ CompanyName ] = Some Other Company ;    dtCust Rows Add(row );

  DataSet ds = new DataSet( MySillyDataSet );    ds Tables Add(dtCust );    ds Merge(dtCust );

  dgTest DataSource = dtCust ;

  在ADO NET 中 对DataTable作了改进 同样提供了Merge方法 因此如上的代码中 如果要合并表dtCust 和dtCust 就不必再引入DataSet对象了

  dtCust Merge(dtCust )

  此外 ADO NET x版本中 DataTable也无法完成Xml文件和数据表之间的转换 这个问题在 版本中 也得到了改进 DataTable也具备了和DataSet对象同样的操作xml文件的能力 包括方法ReadXml WriteXml等

  DataSet和DataTable在 版本中 还提供了一个新的属性RemotingFormat 在对DataTable和DataSet对象进行序列化时 该属性标示序列化的格式是二进制还是xml

  二 轻量级对象和快速遍历

  ADO NET 中的DataTable提供了CreateDataReader方法(在之前的版本名为GetDataReader) 该方法将创建一个DataTableReader对象 DataTableReader与DataTable不同 它是一个轻量级的对象 其支持Disconnected 这一点与DataReader(SqlDataReader)不同 这些特点决定遍历DataTableReader对象将更加快速 占用的数据资源更少(Disconnected) 下面的代码创建了一个DataTableReader对象 并将其绑定到DataGridView控件上

  

  using (SqlConnection cn = new SqlConnection(cnStr))    SqlCommand cmd = new SqlCommand(sqlAllCustomers cn);    SqlDataAdapter adpt = new SqlDataAdapter(cmd);    DataTable dtCustomers = new DataTable( Customers );    adpt Fill(dtCustomers);    DataTableReader dtRdr = ds CreateDataReader();    dgvCustomers DataSource = dtRdr;

  和DataReader一样 DataTableReader对象只能向前遍历 可以通过Read方法 定位到对象的第一行 如果DataTableReader如果是被一个包含有多个数据表的DataSet对象创建 DataTableReader也会包含多个结果集 通过调用NextResult方法 访问结果集序列

  

  

  using (SqlConnection cn = new SqlConnection(cnStr))    // Create the Command and Adapter    SqlCommand cmd = new SqlCommand(sqlAllCustomers cn);    SqlDataAdapter adpt = new SqlDataAdapter(cmd);

  // Create a DataTable and fill it    DataTable dtCustomers = new DataTable( Customers );    adpt Fill(dtCustomers);

  DataSet ds = new DataSet();    ds Tables Add(dtCustomers);    adpt SelectCommand = new SqlCommand( SELECT * FROM Orders cn);    adpt Fill(ds Orders );

  // Create the DataTableReader (it is disconnected)    using(DataTableReader dtRdr = ds CreateDataReader())            do                    Console WriteLine( ****************************** );            while (dtRdr Read())                            Console WriteLine(dtRdr GetValue( ) ToString());                            while (dtRdr NextResult());   

  DataTableReader对象中数据表的顺序与DataSet中的数据表顺序一致 如果你需要制定特定的顺序 可以通过重载CreateDataReader方法来实现

  三 装载数据

  可以通过DataTableReader对象生成DataTable和DataSet 利用DataTable和DataSet在 版本中新引入的方法Load 可以传递DataTableReader或者任何实现IDataReader接口的类对象 下面的代码就是通过Load方法将dt 的数据传递到新的数据表dt 中

  DataTableReader dtRdr = dt CreateDataReader()

  DataTable dt = new DataTable()

  dt Load(dtRdr)

  在使用Load方法装载多行数据时 可以先调用BeginLoadData方法来避免通知(notifications) 索引维护(index maintenance)以及约束检查(constraint checking) 然后再通过EndLoadData方法返回数据

  四 性能改进

  这恐怕是ADO NET 最激动人心的改进 在 x版本中 随着数据的增大 在使用DataTable和DataSet对象时 性能是不能令人满意的 ADO NET 对索引引擎作了很大的改进 使得 的数据访问能力获得极大的提高 以下面的测试代码为例

  

  

  DataTable dt = new DataTable( foo );DataColumn pkCol = new DataColumn( ID Type GetType( System Int ));pkCol AutoIncrement = true;pkCol AutoIncrementSeed = ;pkCol AutoIncrementStep = ;dt Columns Add(pkCol);dt PrimaryKey = new DataColumn[] pkCol ;dt Columns Add( SomeNumber Type GetType( System Int ));dt Columns[ SomeNumber ] Unique = true;

  int limit = ;int someNumber = limit;DateTime startTime = DateTime Now;for (int i = ; i <= limit; i++)    DataRow row = dt NewRow();    row[ SomeNumber ] = someNumber—;    dt Rows Add(row);

  TimeSpan elapsedTime = DateTime Now startTime

  MessageBox Show(dt Rows Count ToString() + rows loaded in + elapsedTime TotalSeconds + seconds )

  分别在Visual Studio NET 和Visual Studio 环境下运行 结果比较如下

  Iterations

  ADO NET

  ADO NET

  

  

  

  

  

  

  

  

cha138/Article/program/net/201311/13399

相关参考

知识大全 深入分析ADO.NET中的DataSet对象

深入分析ADO.NET中的DataSet对象  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  AD

知识大全 ADO.NET 2.0 数据异步处理改善用户体验

ADO.NET2.0数据异步处理改善用户体验  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  支持

知识大全 ADO.NET 2.0 动态指定 ObjectDataSource 的 SelectMethod

ADO.NET2.0动态指定ObjectDataSource的SelectMethod  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布

知识大全 经测试ADO.NET 2.0竟然比1.0要慢

经测试ADO.NET2.0竟然比1.0要慢  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  镜子里

知识大全 迈向Data 2.0——在客户端操作ADO.NET数据服务

迈向Data2.0——在客户端操作ADO.NET数据服务  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 ADO.NET在开发中的部分使用方法和技巧[4]

总结:ADO.NET在开发中的部分使用方法和技巧[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 ADO.NET在开发中的部分使用方法和技巧[5]

总结:ADO.NET在开发中的部分使用方法和技巧[5]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 ADO.NET在开发中的部分使用方法和技巧[7]

总结:ADO.NET在开发中的部分使用方法和技巧[7]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 ADO.NET在开发中的部分使用方法和技巧[9]

总结:ADO.NET在开发中的部分使用方法和技巧[9]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 ADO.NET在开发中的部分使用方法和技巧[8]

总结:ADO.NET在开发中的部分使用方法和技巧[8]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧