新建新表並賦值
新建新表
DataTable dt = new DataTable(); //創建一個空表
DataTable dt = new DataTable("doctor"); //創建一個名爲"doctor"的空表
賦值
爲空表添加三列
dtNew.Columns.Add("A", Type.GetType("System.String")); //添加第一列,列名爲A
dtNew.Columns.Add("B", Type.GetType("System.String")); //添加第二列,列名爲B
dtNew.Columns.Add("C", Type.GetType("System.String")); //添加第三列,列名爲C
爲創建好的空表動態添加行,每行都有三列
int n = 3;
for (int i = 0; i < n; i++)
{
DataRow dr = dt.NewRow(); //新建行
dr[0] = (i + 0).ToString(); //第一列賦值
dr[1] = (i + 1).ToString(); //第二列賦值
dr[2] = (i + 2).ToString(); //第三列賦值
dt.Rows.Add(dr); //向表中添加行
}
通過名稱賦值
行
DataRow dr = dt.NewRow(); //新建行
dr[0] = "張三"; //通過索引賦值
dr["A"] = "張三" //通過名稱賦值
表
dt.Rows[0][0] = "張三"; //通過索引賦值
dt.Rows[0]["A"] = "張三"; //通過名稱賦值
MySqlDataReader轉換DataTable
下面是我的代碼示例
DataTable dt_doctor = new DataTable(); //新建空表
string sql = "select * from doctor;"; //查詢語句
MySqlDataReader reader = Goal_Mysql_var.mysql.exec_mysql_command_execute_Reader(sql); //這是我代碼裏自己寫的
dt_doctor.Load(reader); //將MySqlDataReader轉換爲DataTable
reader.Close(); //關閉reader
插入一行數據
DataTable dtNewr = new DataTable();
dtNew.ImportRow(dt.Rows[0]);//這是加入dt中的第一行數據
刪除
使用DataTable.Rows.Remove(DataRow)方法
dt.Rows.Remove(dt.Rows[0]); //使用DataTable.Rows.Remove(DataRow)方法,刪除第0行
dt.AcceptChanges();
使用DataTable.Rows.RemoveAt(index)方法
dt.Rows.RemoveAt(0); //使用DataTable.Rows.RemoveAt(index)方法,刪除第0行
dt.AcceptChanges();
使用DataRow.Delete()方法
dt.Row[0].Delete(); //使用DataRow.Delete()方法,刪除地0行
dt.AcceptChanges();
區別和聯繫
- Remove()和RemoveAt()方法是直接刪除
- Delete()方法只是將該行標記爲deleted,但是還存在,還可DataTable.RejectChanges()回滾,使該行取消刪除。
- 用Rows.Count來獲取行數時,還是刪除之前的行數,需要使用DataTable.AcceptChanges()方法來提交修改。
- 如果要刪除DataTable中的多行,應該採用倒序循環DataTable.Rows,而且不能用foreach進行循環刪除,因爲正序刪除時索引會發生變化,程式發生異常,很難預料後果。
取值
string name = dt.Rows[0][0].ToString(); //通過索引取值
string name1 = dt.Rows[0]["A"].ToString(); //通過列名取值
複製
複製表,同時複製了表結構和表中的數據
DataTable dtNew = new DataTable();
dtNew = dt.Copy();
dtNew.Clear() //清空數據
克隆表,只是複製了表結構,不包括數據
DataTable dtNew = new DataTable();
dtNew = dt.Clone();
排序
DataView dv = dt.DefaultView; //獲取表視圖
dv.Sort = "ID DESC"; //按照ID倒序排序
dv.ToTable(); //轉爲表
篩選行
DataRow[] drs = dt.Select("A is null"); //選擇A列值爲空的行的集合
DataRow[] drs = dt.Select("A = '李四'"); //選擇A列值爲"李四"的行的集合
DataRow[] drs = dt.Select("A like '張%'");//篩選A列值中有"張"的行的集合(模糊查詢),如果的多條件篩選,可以加 and 或 or
DataRow[] drs = dt.Select("A like '張%'", "B DESC"); //篩選A列值中有"張"的行的集合並按B降序排序