• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • ASP.NET 2.0中DataTable小兵變大將

    發表于:2007-06-30來源:作者:點擊數: 標簽:
    我們先看一段WEB Service的代碼。 [WebMethod] public DataTable GetInfo() ...{ OleDbConnection nwindConn = new OleDbConnection( "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=D:\\Northwind\\northwind.mdb;"); OleDbCommand selectCMD = new O
         我們先看一段WEB Service的代碼。
      
      [WebMethod]
      public DataTable GetInfo()
      ...{
      OleDbConnection nwindConn = new OleDbConnection(
      "Provider=Microsoft.Jet.OLEDB.4.0;" +
      "Data Source=D:\\Northwind\\northwind.mdb;");
      
      OleDbCommand selectCMD =
      new OleDbCommand("SELECT CustomerID, CompanyName FROM Customers"
      , nwindConn);
      selectCMD.CommandTimeout = 30;
      
      OleDbDataAdapter custDA = new OleDbDataAdapter();
      custDA.SelectCommand = selectCMD;
      
      DataSet custDS = new DataSet();
      custDA.Fill(custDS, "Customers");
      return custDS.Tables[0];
      }
      
        在.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的代碼合并參看下面代碼。
      
      private static void DemonstrateMergeTable()
      ...{
      DataTable table1 = new DataTable("Items");
      
      DataColumn column1 = new DataColumn("id", typeof(System.Int32));
      DataColumn column2 = new DataColumn("item", typeof(System.Int32));
      table1.Columns.Add(column1);
      table1.Columns.Add(column2);
      
      table1.PrimaryKey = new DataColumn[] ...{ column1 };
      table1.RowChanged += new System.Data.DataRowChangeEventHandler(Row_Changed);
      
      DataRow row;
      for (int i = 0; i <= 3; i++)
      ...{
      row = table1.NewRow();
      row["id"] = i;
      row["item"] = i;
      table1.Rows.Add(row);
      }
      
      // Aclearcase/" target="_blank" >ccept changes.
      table1.AcceptChanges();
      
      DataTable table2 = 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);
      
      // Merge table2 into the table1.
      table1.Merge(table2);
      }
      
        綜合上述,.net 2.0 中 DataTable 從后臺的默默無問的小兵變成獨當一面的大將了。
      
      
      

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>