C#操做DataTable類

1、DataTable簡介
  (1)構造函數數據庫

名稱 說明
DataTable()  不帶參數初始化DataTable 類的新實例
DataTable(string tableName) 用指定的表名初始化DataTable 類的新實例
DataTable(string tableName, string tableNamespace)  用指定的表名和命名空間初始化DataTable類的新實例

  (2)經常使用屬性 架構

名稱 說明
CaseSensitive 指示表中的字符串比較是否區分大小寫
ChildRelations 獲取此DataTable 的子關係的集合
Columns 獲取屬於該表的列的集合
Constraints 獲取由該表維護的約束的集合
DataSet 獲取此表所屬的DataSet
DefaultView 獲取可能包括篩選視圖或遊標位置的表的自定義視圖
HasErrors 獲取一個值,該值指示該表所屬的DataSet 的任何表的任何行中是否有錯誤
MinimumCapacity 獲取或設置該表最初的起始大小。該表中行的最初起始大小。默認值爲50
Rows 獲取屬於該表的行的集合
TableName  獲取或設置DataTable的名稱

  (3)經常使用方法 ide

名稱 說明
AcceptChanges()  提交自上次調用AcceptChanges() 以來對該表進行的全部更改
BeginInit()  開始初始化在窗體上使用或由另外一個組件使用的DataTable。初始化發生在運行時
Clear() 清除全部數據的DataTable
Clone() 克隆DataTable 的結構,包括全部DataTable 架構和約束
EndInit() 結束在窗體上使用或由另外一個組件使用的DataTable 的初始化。初始化發生在運行時
ImportRow(DataRow row) 將DataRow 複製到DataTable 中,保留任何屬性設置以及初始值和當前值
Merge(DataTable table) 將指定的DataTable 與當前的DataTable 合併
NewRow() 建立與該表具備相同架構的新DataRow

        2、DataTable使用技巧函數

  (1)查找Select    ui

using System; using System.Data; using System.Text; namespace ConsoleApp { class Program { static void Main(string[] args) { DataTable dt = new DataTable("temp"); dt.Columns.Add("Id");           //添加列
            dt.Columns.Add("Name"); dt.Rows.Add("1", "劉備");       //添加行
            dt.Rows.Add("2", "關羽"); dt.Rows.Add("3", "張飛"); dt.Rows.Add("4", "趙雲"); dt.Rows.Add("5", "黃忠"); SelectFun(dt); Console.ReadKey(); } #region 遍歷範例
        /// <summary>
        /// 遍歷方式一 /// </summary>
        /// <param name="dt"></param>
        static void TraversalFun1(DataTable dt) { for (int i = 0; i < dt.Rows.Count; i++) { Console.WriteLine("編號:{0};名稱:{1}", dt.Rows[i]["Id"].ToString(), dt.Rows[i]["Name"].ToString()); } } /// <summary>
        /// 遍歷方式二 /// </summary>
        /// <param name="dt"></param>
        static void TraversalFun2(DataTable dt) { foreach (DataRow myRow in dt.Rows) { Console.WriteLine("編號:{0};名稱:{1}", myRow[0].ToString(), myRow[1].ToString()); } } /// <summary>
        /// 遍歷方式三 /// </summary>
        /// <param name="dt"></param>
        static void TraversalFun3(DataTable dt) { foreach (DataRow dr in dt.Rows) { Console.WriteLine("編號:{0};名稱:{1}", dr["Id"].ToString(), dr["Name"].ToString()); } } /// <summary>
        /// 遍歷方式四 /// </summary>
        /// <param name="dt"></param>
        static void TraversalFun4(DataTable dt) { StringBuilder msg = new StringBuilder(); foreach (DataRow dr in dt.Rows) { msg.Clear(); foreach (DataColumn dc in dt.Columns) { msg.AppendFormat("{0}:{1};", dc.ColumnName, dr[dc.ColumnName]); } Console.WriteLine(msg.ToString()); } } #endregion

        #region 查找範例
        static void SelectFun(DataTable dt) { //條件查詢
            Console.WriteLine("條件查詢示例語句:Id > 1 and Name <> '關羽'"); Display(dt.Select("Id > 1 and Name <> '關羽'", "Id desc")); //like示例
            Console.WriteLine("like示例語句:Name like '關%"); Display(dt.Select("Name like '關%'", "Id desc")); } static void Display(DataRow[] drArr) { foreach (DataRow dr in drArr) { Console.WriteLine(dr["Name"]); } } #endregion } }
View Code

   (2)排序、聚合spa

using System; using System.Data; namespace ConsoleApp { class Program { static void Main(string[] args) { DataTable dt = new DataTable(); dt.Columns.Add("Id"); dt.Columns.Add("Name"); dt.Columns.Add("Age", typeof(Int32));       //注意要計算平均值要設置列類型爲數字
            dt.Rows.Add("1", "劉備", 31); dt.Rows.Add("2", "關羽", 29); dt.Rows.Add("3", "張飛", 28); dt.Rows.Add("4", "趙雲", 27); dt.Rows.Add("5", "黃忠", 50); dt.DefaultView.Sort = "Age DESC";           //排序
            dt = dt.DefaultView.ToTable(); foreach (DataRow dr in dt.Rows) { Console.WriteLine(dr["Name"]); } object obj = dt.Compute("Count(Id)", "Age>26");     //輸出3 查詢年齡大於26的人數
 Console.WriteLine(obj.ToString()); object obj2 = dt.Compute("Avg(Age)", "true");     //輸出33 查詢全部人的平均年齡(要設置列爲整型,不然不能計算)
 Console.WriteLine(obj2.ToString()); object obj3 = dt.Compute("Sum(Age)", "true");     //輸出165
 Console.WriteLine(obj3.ToString()); Console.ReadKey(); } } }
View Code

  (3)自增列code

using System; using System.Data; namespace ConsoleApp { class Program { static void Main(string[] args) { DataTable dt = new DataTable(); DataColumn dc = dt.Columns.Add("Id", Type.GetType("System.Int32")); dc.AutoIncrement = true;    //自動增長
            dc.AutoIncrementSeed = 1;   //起始爲1
            dc.AutoIncrementStep = 1;   //步長爲1
            dc.AllowDBNull = false;     //不容許爲空
 dt.Columns.Add("Name", Type.GetType("System.String")); dt.Columns.Add("Age", typeof(Int32));       //注意要計算平均值要設置列類型爲數字
            dt.Rows.Add(null, "劉備", 31);            //注意此次添加不用在手輸Id了,可是要給個null
            dt.Rows.Add(null, "關羽", 29); dt.Rows.Add(null, "張飛", 28); dt.Rows.Add(null, "趙雲", 27); dt.Rows.Add(null, "黃忠", 50); foreach (DataRow dr in dt.Rows) { Console.WriteLine(dr["Id"]);    //輸出1 2 3 4 5
 } Console.ReadKey(); } } }
View Code

  (4)System.DBNullorm

   null在.Net中表示無效的對象引用。 即空對象。對象

  DBNull是一個類(System.DBNull)。這個類直接繼承於Object,它只有繼承下來的屬性與方法,只有一個本身的字段value。表示它本身。指數據庫中數據爲空(NULL)時,在.Net中的值。DBNull.Value表示一個對象在數據庫中的值爲空,或者說未初始化,DBNull.Value對象是指向有效的對象。
  可是爲何 DBNull 能夠表示數據庫中的字符串,數字,或日期呢?緣由是.Net儲存這些數據的類(DataRow等)都是以 object 的形式來儲存數據的。
       對於 DataRow , 它的 row["column"] 返回的值永遠不爲null , 要麼就是具體的爲column的類型的值。要麼就是DBNull 。 因此 row[column].ToString() 這個寫法永遠不會在ToString那裏發生NullReferenceException,但有可能拋下標越界的異常。
  DBNull 實現了 IConvertible 。 可是,除了 ToString 是正常的外,其餘的ToXXX都會拋出不能轉換的錯誤。
  在 IDbCommand(OleDbCommand,SqlCommand...) 的ExecuteScalar的返回值中,狀況能夠這樣分析:
blog

     SELECT 1         --這樣返回的object是1。

    SELECT null    --這樣返回的是DBNull.Value。

  eg:假設在DataSet中我設置了一個int類型,可是在顯示的時候,我想讓爲0的地方顯示爲空白該怎麼實現呢?

using System; using System.Data; namespace ConsoleApp { class Program { static void Main(string[] args) { DataTable dt = new DataTable(); dt.Columns.Add("Name", typeof(String)); dt.Columns.Add("Age", typeof(Int32)); dt.Rows.Add("撼地神牛", 0); dt.Rows.Add("劉備", 21); for (int i = 0; i < dt.Rows.Count; i++) { if (dt.Rows[i]["Age"].ToString() == "0") { //dt.Rows[i]["Age"] = null; 這樣寫會提示以下錯誤:不能將 Column「Age」設置爲 null。請改用 DBNull。
                    dt.Rows[i]["Age"] = DBNull.Value; } Console.WriteLine(dt.Rows[i]["Name"] + ":" + dt.Rows[i]["Age"]); } Console.ReadKey(); } } }
View Code
相關文章
相關標籤/搜索