熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

ASP.NET 2.0中DataTable小兵變大將

2013-11-13 10:22:33  來源: .NET編程 

  我們先看一段WEB Service的代碼
  
  [WebMethod]
  public DataTable GetInfo()
  {
  OleDbConnection nwindConn = new OleDbConnection(
  Provider=MicrosoftJetOLEDB; +
  Data Source=D:\\Northwind\\northwindmdb;);
  
  OleDbCommand selectCMD =
  new OleDbCommand(SELECT CustomerID CompanyName FROM Customers
   nwindConn);
  selectCMDCommandTimeout = ;
  
  OleDbDataAdapter custDA = new OleDbDataAdapter();
  custDASelectCommand = selectCMD;
  
  DataSet custDS = new DataSet();
  custDAFill(custDS Customers);
  return custDSTables[];
  }
  
   這是典型的一個錯誤 WEB Service 的返回或者輸入參數不能是 DataTable這是一個眾人皆知的知識點原因就是 DataTable 不象DataSet那樣支持序列化 我們解決這個問題的方法就是使用DataSet但是使用DataSet 的時候經常會有一種殺雞用牛刀的感覺
  
  附 中使用DataTable作為WEB Service 返回值會報以下異常
  
  類型 SystemComponentModelISite 的成員 SystemComponentModelMarshalByValueComponentSite 是接口因此無法將其序列化
  
   以上同樣的代碼則沒有任何問題了原因是中 DataTable實現了序列化反序列
  
  在VS Beta 的文檔中我們可以看到 中 DataTable實現了以下接口
  
  Explicit Interface Implementations
  SystemComponentModelIListSourceget_ContainsListCollection
  SystemComponentModelIListSourceGetList
  SystemXmlSerializationIXmlSerializableGetSchema
  SystemXmlSerializationIXmlSerializableReadXml
  SystemXmlSerializationIXmlSerializableWriteXml
  
  而在DataTable 只實現了一個接口
  
  Explicit Interface Implementations
  SystemComponentModelIListSourceContainsListCollection
  
  把DataSet中的一些功能移到 DataTable中 中還有 Merge 方法即合並數個數據集
  
  DataTable的代碼合並參看下面代碼
  
  private static void DemonstrateMergeTable()
  {
  DataTable table = new DataTable(Items);
  
  DataColumn column = new DataColumn(id typeof(SystemInt));
  DataColumn column = new DataColumn(item typeof(SystemInt));
  tableColumnsAdd(column);
  tableColumnsAdd(column);
  
  tablePrimaryKey = new DataColumn[] { column };
  tableRowChanged += new SystemDataDataRowChangeEventHandler(Row_Changed);
  
  DataRow row;
  for (int i = ; i <= ; i++)
  {
  row = tableNewRow();
  row[id] = i;
  row[item] = i;
  tableRowsAdd(row);
  }
  
  // Accept changes
  tableAcceptChanges();
  
  DataTable table = tableClone();
  row = tableNewRow();
  row[id] = ;
  row[item] = ;
  tableRowsAdd(row);
  
  row = tableNewRow();
  row[id] = ;
  row[item] = ;
  tableRowsAdd(row);
  
  row = tableNewRow();
  row[id] = ;
  row[item] = ;
  tableRowsAdd(row);
  
  // Merge table into the table
  tableMerge(table);
  }
  
  綜合上述 中 DataTable 從後台的默默無問的小兵變成獨當一面的大將了
From:http://tw.wingwit.com/Article/program/net/201311/13425.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.