我们先看一段WEB Service的代码。

.net 2.0 中 DataTable 小兵变大将[WebMethod] .net 2.0 中 DataTable 小兵变大将public DataTable GetInfo() { .net 2.0 中 DataTable 小兵变大将 OleDbConnection nwindConn = new OleDbConnection( .net 2.0 中 DataTable 小兵变大将"Provider=Microsoft.Jet.OLEDB.4.0;" + .net 2.0 中 DataTable 小兵变大将"Data Source=D:\\Northwind\\northwind.mdb;"); .net 2.0 中 DataTable 小兵变大将.net 2.0 中 DataTable 小兵变大将 OleDbCommand selectCMD = .net 2.0 中 DataTable 小兵变大将new OleDbCommand("SELECT CustomerID, CompanyName FROM Customers" .net 2.0 中 DataTable 小兵变大将 , nwindConn); .net 2.0 中 DataTable 小兵变大将 selectCMD.CommandTimeout = 30; .net 2.0 中 DataTable 小兵变大将.net 2.0 中 DataTable 小兵变大将 OleDbDataAdapter custDA = new OleDbDataAdapter(); .net 2.0 中 DataTable 小兵变大将 custDA.SelectCommand = selectCMD; .net 2.0 中 DataTable 小兵变大将.net 2.0 中 DataTable 小兵变大将 DataSet custDS = new DataSet(); .net 2.0 中 DataTable 小兵变大将 custDA.Fill(custDS, "Customers"); .net 2.0 中 DataTable 小兵变大将return custDS.Tables[0]; .net 2.0 中 DataTable 小兵变大将} .net 2.0 中 DataTable 小兵变大将

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

附:.net 1.1 中使用DataTable作为WEB Service 返回值会报以下异常:

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

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

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

Explicit Interface Implementations
  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 只实现了一个接口:

Explicit Interface Implementations
System.ComponentModel.IListSource.ContainsListCollection

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

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

.net 2.0 中 DataTable 小兵变大将 private static void DemonstrateMergeTable() { .net 2.0 中 DataTable 小兵变大将DataTable table1 = new DataTable("Items"); .net 2.0 中 DataTable 小兵变大将.net 2.0 中 DataTable 小兵变大将 DataColumn column1 = new DataColumn("id", typeof(System.Int32)); .net 2.0 中 DataTable 小兵变大将 DataColumn column2 = new DataColumn("item", typeof(System.Int32)); .net 2.0 中 DataTable 小兵变大将 table1.Columns.Add(column1); .net 2.0 中 DataTable 小兵变大将 table1.Columns.Add(column2); .net 2.0 中 DataTable 小兵变大将; .net 2.0 中 DataTable 小兵变大将 table1.RowChanged += new System.Data.DataRowChangeEventHandler(Row_Changed); .net 2.0 中 DataTable 小兵变大将.net 2.0 中 DataTable 小兵变大将 DataRow row; .net 2.0 中 DataTable 小兵变大将for (int i = 0; i <= 3; i++) { .net 2.0 中 DataTable 小兵变大将 row = table1.NewRow(); .net 2.0 中 DataTable 小兵变大将 row["id"] = i; .net 2.0 中 DataTable 小兵变大将 row["item"] = i; .net 2.0 中 DataTable 小兵变大将 table1.Rows.Add(row); .net 2.0 中 DataTable 小兵变大将 } .net 2.0 中 DataTable 小兵变大将.net 2.0 中 DataTable 小兵变大将// Accept changes. .net 2.0 中 DataTable 小兵变大将 table1.AcceptChanges(); .net 2.0 中 DataTable 小兵变大将.net 2.0 中 DataTable 小兵变大将DataTable table2 = table1.Clone(); .net 2.0 中 DataTable 小兵变大将 row = table2.NewRow(); .net 2.0 中 DataTable 小兵变大将 row["id"] = 14; .net 2.0 中 DataTable 小兵变大将 row["item"] = 774; .net 2.0 中 DataTable 小兵变大将 table2.Rows.Add(row); .net 2.0 中 DataTable 小兵变大将.net 2.0 中 DataTable 小兵变大将 row = table2.NewRow(); .net 2.0 中 DataTable 小兵变大将 row["id"] = 12; .net 2.0 中 DataTable 小兵变大将 row["item"] = 555; .net 2.0 中 DataTable 小兵变大将 table2.Rows.Add(row); .net 2.0 中 DataTable 小兵变大将.net 2.0 中 DataTable 小兵变大将 row = table2.NewRow(); .net 2.0 中 DataTable 小兵变大将 row["id"] = 13; .net 2.0 中 DataTable 小兵变大将 row["item"] = 665; .net 2.0 中 DataTable 小兵变大将 table2.Rows.Add(row); .net 2.0 中 DataTable 小兵变大将.net 2.0 中 DataTable 小兵变大将// Merge table2 into the table1. .net 2.0 中 DataTable 小兵变大将 table1.Merge(table2); .net 2.0 中 DataTable 小兵变大将 } .net 2.0 中 DataTable 小兵变大将
综合上述,.net 2.0 中 DataTable 从后台的默默无问的小兵变成独当一面的大将了。

相关文章:

  • 2021-07-26
  • 2021-10-04
  • 2021-06-14
  • 2022-12-23
  • 2021-05-01
猜你喜欢
  • 2021-07-15
  • 2021-12-08
  • 2021-09-10
相关资源
相似解决方案