• <tbody id="eay9b"></tbody>
    <progress id="eay9b"><pre id="eay9b"></pre></progress>
    
    
    1. 站長工具,就用查一把!
      收錄查詢  關鍵詞排名  Alexa排名  PR檢測  友情檢測  IP反查  WHOIS查詢   更多查詢 
        收藏  最近查詢 查一把
      信息分類 首頁 » 資訊信息

      好站推薦

      IT新聞

        業界猜想

        名人名企

      建站推廣

        站長創業

        運營推廣

      設計編程

        美工設計

        開發編程

      DataTable與XML文件交互
      信息來源:查一把 發布時間:2012/1/12

       

      在為DataTable定義了架構之后,也就是設置好了需要的列名以后,就可以可通過將DataRow對象添加到表的Rows集合中來將數據行添加到表中。與添加DataColumn類似,同樣可以通過使用DataRow構造函數,或者通過調用表的Rows屬性的Add方法,可在表內創建DataRow對象。

      DataColumn對象集合表示了表的模式(Schema)。DataTable通過內部的DataColumnCollection類型保存表中所有列。相反,DataRow類型集合就表示表中的實際數據。這樣,如果Customers表中有10個記錄,就可以使用10個DataRow類型來表示它們。使用DataRow類的成員可以對表中的值進行插入、刪除、求值和操作操作。

      創建一個DataRow數據行的對象,實現代碼如下所示:

      //創建一個Customers數據表

      DataTable CustomersTable = new DataTable("Customers ");

      //創建一個新的數據行

      DataRow arow = CustomersTable.NewRow();

      //設置行的值

      arow[ColumnName] = Data;

      //把數據行添加創建的Customers數據表中

      CustomersTable.Rows.Add(arow);

      功能說明:

      新建一行arow, 并給這行某一個列名付值為Data,最后把這一行添加到Customers表中。使用DataRow與使用DataColumn有些不同,因為不可以直接創建這個類型的實例,而是獲得一個來自給定DataTable的引用。例如,假設想往Customers表中添加新行,DataTable.NewRow()方法可以獲得下一空位,然后在上面填充每列的數據。

      實現代碼如下所示:

      //創建一個數據表

      DataTable CustomersTable = new DataTable("Customers");

      //聲明數據表的行和列變量

      DataColumn column;

      DataRow row;

      //創建一個新列,設置列的數據列性和列名,并把這個新列添加到Customers表中

      column=new DataColumn();

      column.DataType = System.Type.GetType("System.Int32");

      column.ColumnName = " CustID ";

      CustomersTable.Columns.Add(column);

      //再創建一個新列

      column = new DataColumn();

      column.DataType = Type.GetType("System.String");

      column.ColumnName = " CustLName ";

      CustomersTable.Columns.Add(column);

      //創建新的一行并把這個行添加到Customers表中

      for(int i = 0; i < 10; i++)

      {

      row = CustomersTable.NewRow();

      row["CustID "] = i;

      row["CustLName "] = "item " + i.ToString();

      CustomersTable.Rows.Add(row);

      }

      功能說明:

      向CustomersTable表創建兩個列分別是CustID, CustLName,然后用循環的方式產生10行并附值,添加到CustomersTable表中。

      8.4.7 操作DataTable:更新行

      在前面一節里面講了,怎么樣添加一個DataRow行,那么下面需要了解的關于DataTable的另一個方面就是怎樣用新值更新已有的DataRow行。下面開始介紹關于DataTable更新行的問題。

      最常使用的一個方法就是先用Select()方法獲得符合給定過濾條件的行。一旦獲得這些DataRow,就對它們作相應的修改。例如,假定有一個新按鈕在被單擊后,搜索DataTable中所有EmployeeID列值為5的行。一旦標識這些項后,就可以把EmployeeID列對應值5改為6。實例代碼如下:

      //數據庫聯接字符串

      string connectionString =

      "Data Source=local;Initial Catalog=Northwind;Integrated Security=True;UserID=sa;Password=";

      //sql語句把Orders表中的數據信息都取出來

      string commandString = "Select * from Orders";

      SqlDataAdapter dataAdapter = new SqlDataAdapter(commandString, connectionString);

      DataSet dataSet = new DataSet(  );

      //填充數據集

      dataAdapter.Fill(dataSet," Orders");

      //填充數據表

      DataTable dataTable = dataSet.Tables("Orders");

      // 建立一個用于過濾出EmployeeID列值為5的行的行的變量

      string filterStr = "EmployeeID=5";

      string strEmployeeID = null;

      // 查詢出來所有EmployeeID列值為5的行.

      DataRow[] EmployeeID= dataTable.Select(filterStr);

      // EmployeeID列對應值5改為6

      for(int i = 0; i < EmployeeID.Length; i++)

      {

      DataRow temp = EmployeeID [i];

      strEmployeeID += temp["EmployeeID "] = 6;

      EmployeeID [i] = temp;

      }

      8.4.8 用編程方式刪除DataTable行

      用于從DataTable對象中刪除DataRow對象的方法有兩種:DataRowCollection對象的 Remove方法和DataRow對象的Delete方法。

      Remove方法和Delete方法都可以將DataTable的行DataRow刪除,但是前者是從DataRowCollection中刪除DataRow,而后者只將行標記為刪除。當應用程序調用AcceptChanges方法時,才會發生實際的刪除。通過使用Delete,可以在實際刪除之前先以編程方式檢查哪些行標記為刪除。如果將行標記為刪除,其RowState屬性會設置為Deleted。

      在將DataSet或DataTable與DataAdapter和關系型數據源一起使用時,用DataRow的 Delete方法移除行。Delete方法只是在DataSet或DataTable中將行標記為Deleted,而不會移除它。而DataAdapter在遇到標記為Deleted的行時,會執行其DeleteCommand方法以在數據源中刪除該行。然后,就可以用AcceptChanges方法永久移除該行。如果使用Remove刪除該行,則該行將從表中完全移除,但DataAdapter不會在數據源中刪除該行。

      DataRowCollection的Remove方法采用DataRow作為參數,并將其從集合中移除,實現代碼如下所示:

      DataTable CustomersTable = new DataTable("Customers ");

      DataRow workRow = empTable.NewRow();

      CustomersTable.Rows.Remove(workRow);

      作為對比,以下示例演示了如何調用DataRow上的Delete方法來將其RowState改為Deleted。實現代碼如下所示:

      DataTable CustomersTable = new DataTable("Customers ");

      DataRow workRow = empTable.NewRow();

      workRow.Delete();

      如果將行標記為刪除,并且調用DataTable對象的AcceptChanges方法,該行就會從DataTable中移除。相比之下,如果調用RejectChanges,行的RowState就會恢復到被標記為Deleted之前的狀態。

      8.4.9 向DataTable填充數據

      ADO.NET中的DataSet是數據的內存駐留表示形式,它提供了獨立于數據源的一致關系編程模型。DataSet表示整個數據集,其中包含表、約束和表之間的關系。由于DataSet獨立于數據源,DataSet可以包含應用程序本地的數據,也可以包含來自多個數據源的數據。與現有數據源的交互通過DataAdapter來控制。

      DataAdapter的SelectCommand屬性是一個Command對象,用于從數據源中檢索數據。DataAdapter的InsertCommand、UpdateCommand和DeleteCommand屬性也是Command對象,用于按照對DataSet中數據的修改來管理對數據源中數據的更新。

      DataAdapter的Fill方法用于使用DataAdapter的SelectCommand的結果來填充DataSet。Fill將要填充的DataSet和DataTable對象(或要使用從SelectCommand中返回的行來填充的DataTable的名稱)作為它的參數。

      Fill方法使用DataReader對象來隱式地返回用于在DataSet中創建表的列名稱和類型以及用于填充DataSet中的表行的數據。表和列僅在不存在時才創建;否則,Fill將使用現有的DataSet架構。

      以下代碼示例使用SqlDataAdapter對象獲取MicrosoftSQL Server Northwind數據庫的數據填充到Customers數據集中的Customers表。

      實現代碼如下所示:

      //使用DataAdapter的Fill方法向Customers表中填充數據

      string connectionString =

      "Data Source= local;Initial Catalog=Northwind;Integrated Security=True; UserID=sa;Password=";

      string commandString = "Select * from Customers";

      SqlDataAdapter dataAdapter = new SqlDataAdapter(commandString, connectionString);

      DataSet customers = new DataSet();

      dataAdapter.Fill(customers, "Customers");

      8.4.10 在DataTable實現類似sql語句的查詢功能

      在脫離數據庫的DataSet實現類似sql語句的查詢。

      也就是(select ... from tablename where ...)這樣的功能。

      將從DataSet中查詢出來的數據以行的形式保存到arow中。

      實現代碼如下所示:

      DataSet ds= new DataSet();

      DataRow[] arow = ds.Tables[TableName].Select("" + ColumnsName+ "='" + DataValue + "'");

      代碼說明:

      qTableName:數據集ds中的表名。

      qColumnsName:TableName表中的某一列名。

      qData:和列名對應參數的值。

      功能說明:

      上面語句功能相當于sql語句中的查詢語句

      Select * From TableName where ColumnsName= Data

      8.4.11 DataTable中數據記錄的統計

      在使用數據庫時例如SQL-Server、Oracle這些數據庫,可以輕松的通過統計和計算函數例如Sum、Aver、Count等統計或計算出相關結果,那么,在已經把數據檢索出來的DataTable數據集中能否同樣使用呢?在程序中根據需要動態創建的DataTable是沒有辦法使用sql語句進行查詢統計的,例如沒有辦法使用Select語句來獲取查詢統計結果。那么在DataTable中怎么來進行統計呢?

      本節將介紹一個簡單的方法,可以輕松的獲得DataTable中的記錄統計結果。這個簡單的方法就是調用功能強大的DataTable的函數Compute。

      函數如下:

      public object Compute(string expression,string filter)

      參數說明:

      qexpression 參數需要聚合函數,要計算的表達式字符串,基本上類似于Sql Server中的統計表達式。例如,以下是合法表達式:Count(ID)。

      qfilter:統計的過濾字符串,只有滿足這個過濾條件的記錄才會被統計,也就是確定在表達式中使用哪些行。

      以下示例,以SQL-Server數據庫中的Northwind數據庫中的Orders數據表,描述訂單信息,包含字段為:訂單號(OrderID)、客戶編號(CustomerID)、職工編號(EmployeeID)、訂貨時間(OrderDate)、船號(ShipVia)、運費(Freight)。

      1.統計所有職工編號EmployeeID為5的數量:

      table.Compute("Count(*)","EmployeeID=5");

      2.統計所有運費Freight中運費大于100的個數

      table.Compute("Count(*)","Freight>100'");

      3.統計運費Freight的平均值

      table.Compute("Aver(Freight)","true");

      4.統計職工編號EmployeeID為5的運費總額:

      table.Compute("Sum(Freight)"," EmployeeID=5");

      以上都是計算每一列的合計,那么要添加一行求合計可以使用下面的方法:

      //創建一個數據集

      DataSet customers = new DataSet();

      //在數據集中添加一個名稱為CustomersTable的數據表

      DataTable customersTable = customers.Tables.Add("CustomersTable");

      //創建一個新行并添加到CustomersTable數據表中

      DataRow dataRow = new DataRow();

      dataRow= customersTable.NewRow();

      //然后就是統計了,聲明連個int 變量i:循環變量, colCnt: customersTable表中的列數

      int i ;

      int colCnt ;

      colCnt = customersTable.Cols.Count;

      for( i=0 ;i< colCnt -1;i++)

      //求第i列的和并且結果賦值給新的dataRow數據行

      dataRow(i)= customersTable.Compute("Sum("+i.ToString()+")","true");

      //把數據行添加到customersTable數據表中

      customersTable.Rows.Add(dataRow);

      8.4.12 DataTable和xml的一些應用總結

      在ASP.NET2.0中ADO.NET和XML結合的很緊密,第7章中已經詳細介紹了在ADO.NET中的數據通過DataSet很容易存取在XML中的,那么在DataTable能像在DataSet中那樣操作XML數據文件嗎?答案是可以的,下面就是一個將DataTable中的數據寫入到XML文件中去的操作,實例代碼如下所示:

      //創建一個Customers數據表

      DataTable dt = new DataTable("Customers");

      //添加兩列CustID,CustLName數據類型分別為Int32,String,并添加到數據表中

      DataColumn dc1 = new DataColumn("CustID", Type.GetType("System.Int32"));

      DataColumn dc2 = new DataColumn("CustLName", Type.GetType("System.String"));

      dt.Columns.Add(dc1);

      dt.Columns.Add(dc2);

      //利用循環創建數據行并賦值,添加到數據表中

      for (int i = 0; i < al.Count; i++)

      {

      DataRow dr = dt.NewRow();

      DS_Option dso = (DS_Option)al[i];

      dr["CustID"] = dso.ID;

      dr["CustLName"] = dso.Name;

      dt.Rows.Add(dr);

      }

      //將數據表中的數據寫入到XML文件中

      string xmlstr;

      System.IO.StringWriter writer = new System.IO.StringWriter();

      dt.WriteXml(writer);

      xmlstr = writer.ToString();

      return xmlstr;

      有了向XML文件寫數據的操作,當然也可以從XML文件中讀取數據信息到DataTable數據表中,方法累也類似,但要先建立好打DataTable的結構,不然會出錯。

      實例代碼如下所示:

      string tbxml = xmlinfo;

      DataTable dt = new DataTable("Customers ");

      DataColumn dc1 = new DataColumn("CustID", Type.GetType("System.Int32"));

      DataColumn dc2 = new DataColumn("CustLName", Type.GetType("System.String"));

      dt.Columns.Add(dc1);

      dt.Columns.Add(dc2);

      System.IO.StringReader reader = new System.IO.StringReader(tbxml);

      dt.ReadXml(reader);

      轉載請注明出處:站長工具 信息來源:http://www.wwwlao6644.com/Content/267
      網友點評
      日式男女裸交吃奶动态图
    2. <tbody id="eay9b"></tbody>
      <progress id="eay9b"><pre id="eay9b"></pre></progress>