知识大全 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
相关参考
深入分析ADO.NET中的DataSet对象 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! AD
ADO.NET2.0数据异步处理改善用户体验 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 支持
知识大全 ADO.NET 2.0 动态指定 ObjectDataSource 的 SelectMethod
ADO.NET2.0动态指定ObjectDataSource的SelectMethod 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布
经测试ADO.NET2.0竟然比1.0要慢 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 镜子里
知识大全 迈向Data 2.0——在客户端操作ADO.NET数据服务
迈向Data2.0——在客户端操作ADO.NET数据服务 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下
总结:ADO.NET在开发中的部分使用方法和技巧[4] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
总结:ADO.NET在开发中的部分使用方法和技巧[5] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
总结:ADO.NET在开发中的部分使用方法和技巧[7] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
总结:ADO.NET在开发中的部分使用方法和技巧[9] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
总结:ADO.NET在开发中的部分使用方法和技巧[8] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧