当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > ASP.NET 2.0中DataTable小兵变大将

ASP.NET
为T-SQL添加intellisense功能
SQL Server 2005安装过程中出现错误的解决办法
SQL Server 2005 RTM 安装错误 :The SQL Server System Configuration Checker cannot be executed due to
有关于JSON的一些资料
不能忽略c#中的using和as操作符的用处
JavaScript系列之―同步还是异步?
获取远程网页的内容之一(downmoon原创)
获取远程网页的内容之二(downmoon原创)
ASP.Net中防止刷新自动触发事件的解决方案
asp.net下用js实现鼠标移至小图,自动显示相应大图
Asp.Net 和 AJAX.Net 的区别
提交页面的定位--scrollIntoView的用法
利用AJAX与数据岛实现无刷新绑定
asp.net下判断用户什么时候离开,以什么方式离开
DataSet 添加数据集、行、列、主键和外键等操作示例
读写xml所有节点个人小结 和 读取xml节点的数据总结
收藏的asp.net文件上传类源码
asp.net下GDI+的一些常用应用(水印,文字,圆角处理)技巧
一个可以让.net程序在非WIN平台上运行的软件Mono
使用ASP.NET 2.0 CSS 控件适配器生成CSS友好的HTML输出

ASP.NET 2.0中DataTable小兵变大将


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 149 ::
收藏到网摘: n/a

作者:蝈蝈俊出处:博客堂

我们先看一段WEBService的代码。

[WebMethod]
publicDataTableGetInfo()
...{
OleDbConnectionnwindConn=newOleDbConnection(
"Provider=Microsoft.Jet.OLEDB.4.0;"+
"DataSource=D:\\Northwind\\northwind.mdb;");

OleDbCommandselectCMD=
newOleDbCommand("SELECTCustomerID,CompanyNameFROMCustomers"
,nwindConn);
selectCMD.CommandTimeout=30;

OleDbDataAdaptercustDA=newOleDbDataAdapter();
custDA.SelectCommand=selectCMD;

DataSetcustDS=newDataSet();
custDA.Fill(custDS,"Customers");
returncustDS.Tables[0];
}

在.net1.1中,这是典型的一个错误,在.net1.1、1.0中,WEBService的返回或者输入参数不能是DataTable,这是一个众人皆知的知识点。原因就是DataTable不象DataSet那样支持序列化。在.net1.1中,我们解决这个问题的方法就是使用DataSet。但是使用DataSet的时候,经常会有一种杀鸡用牛刀的感觉。

附:.net1.1中使用DataTable作为WEBService返回值会报以下异常:

类型System.ComponentModel.ISite的成员System.ComponentModel.MarshalByValueComponent.Site是接口,因此无法将其序列化。

在.net2.0中,以上同样的代码,则没有任何问题了。原因是2.0中DataTable实现了序列化、反序列。

在VS2005Beta2的文档中,我们可以看到2.0中DataTable实现了以下接口:

ExplicitInterfaceImplementations
System.ComponentModel.IListSource.get_ContainsListCollection
System.ComponentModel.IListSource.GetList
System.Xml.Serialization.IXmlSerializable.GetSchema
System.Xml.Serialization.IXmlSerializable.ReadXml
System.Xml.Serialization.IXmlSerializable.WriteXml

而在1.1中,DataTable只实现了一个接口:

ExplicitInterfaceImplementations
System.ComponentModel.IListSource.ContainsListCollection

把DataSet中的一些功能移到DataTable中,2.0中还有Merge方法,即合并数个数据集。

DataTable的代码合并参看下面代码。

privatestaticvoidDemonstrateMergeTable()
...{
DataTabletable1=newDataTable("Items");

DataColumncolumn1=newDataColumn("id",typeof(System.Int32));
DataColumncolumn2=newDataColumn("item",typeof(System.Int32));
table1.Columns.Add(column1);
table1.Columns.Add(column2);

table1.PrimaryKey=newDataColumn[]...{column1};
table1.RowChanged+=newSystem.Data.DataRowChangeEventHandler(Row_Changed);

DataRowrow;
for(inti=0;i<=3;i++)
...{
row=table1.NewRow();
row["id"]=i;
row["item"]=i;
table1.Rows.Add(row);
}

//Acceptchanges.
table1.AcceptChanges();

DataTabletable2=table1.Clone();
row=table2.NewRow();
row["id"]=14;
row["item"]=774;
table2.Rows.Add(row);

row=table2.NewRow();
row["id"]=12;
row["item"]=555;
table2.Rows.Add(row);

row=table2.NewRow();
row["id"]=13;
row["item"]=665;
table2.Rows.Add(row);

//Mergetable2intothetable1.
table1.Merge(table2);
}

综合上述,.net2.0中DataTable从后台的默默无问的小兵变成独当一面的大将了。