概述
可以把DataTable和DataSet看做是數據容器,比如你查詢數據庫后得到一些結果,可以放到這種容器里,那你可能要問:我不用這種容器,自己讀到變量或數組里也一樣可以存起來啊,為什么用容器?
原因是,這種容器的功能比較強大,除了可以存數據,還可以有更大用途。舉例:在一個c/s結構的桌面數據庫系統里,你可以把前面存放查詢結果的容器里的數據顯示到你客戶端界面上,用戶在界面上對數據進行添加、刪除、修改,你可以把用戶的操作更新到容器,等用戶操作完畢了,要求更新,然后你才把容器整個的數據變化更新到中心數據庫,這樣做的好處是什么?就是減少了數據庫操作,客戶端速度提高了,數據庫壓力減小了。
DataSet可以比作一個內存中的數據庫,DataTable是一個內存中的數據表,DataSet里可以存儲多個DataTable。
DataSet:數據集。一般包含多個DataTable,用的時候,dataset["表名"]得到DataTable
DataTable:數據表。
DEMO1:
- SqlDataAdapter da=new SqlDataAdapter(cmd);
- DataTable dt=new DataTable();
- da.Fill(dt);
直接把數據結果放到datatable中,
DEMO2:
- SqlDataAdapter da=new SqlDataAdapter(cmd);
- DataSet dt=new DataSet();
- da.Fill(dt);
數據結果放到dataset中,若要用那個datatable,可以這樣:dataset[0]
更常見的用法:
- SqlDataAdapter da=new SqlDataAdapter(cmd);
- DataSet dt=new DataSet();
- da.Fill(dt,"table1");
用的時候:這樣取datatable: dataset["table1"]
或者:
- SqlDataAdapter adapter = new SqlDataAdapter(strSql, _Connection);
- adapter.Fill(dataSet);
- return dataSet.Tables[0]
當adapter.Fill(dataSet);執行后,程序會通過SQL引擎返回一個結果集存放在內存中,這個結果集就是一個DataTable,並且這個DataTable會被添家到dataSet.Tables中,所以return dataSet.Tables[0],就是返回你所要查詢的結果集
接收return:
- DataTable table = db.GetDataTable(strSql);
- string rid = table.Rows[0]["rid"].ToString();
table.Rows[0]表示table的第一行數據,table.Rows[0]["rid"].ToString()表示table中列rid的值,table的所有列是你在SQL中所查詢的所有列
遍歷DataTable:
通過通用類,返回一個DataTable,要想顯示每個單元格,只要做兩次循環即可:
- foreach (DataRow row in dt.Rows)
- {
- foreach (DataColumn column in dt.Columns)
- {
- Console.WriteLine(row[column]);
- }
- }
row[column] 中的column是檢索出來的表個列名。
如果想把某列的值拼接字符串,那就去掉內層循環就行了:
- StringBuilder mailList = new StringBuilder();
- foreach (DataRow row in dt.Rows)
- {
- mailList.Append(row["Email"]);
- mailList.Append(";");
- }
向DataTable中手動添加行內容,並進行綁定、更新、排序
- DataTable dt = new DataTable();
- DataRow dr;
- dt.Columns.Add(new DataColumn( "整數值 ", typeof(Int32)));
- dt.Columns.Add(new DataColumn( "字符串值 ", typeof(string)));
- dt.Columns.Add(new DataColumn( "日期時間值 ", typeof(DateTime)));
- dt.Columns.Add(new DataColumn( "布爾值 ", typeof(bool)));
- for (int i = 1; i <= 9; i++) {
- dr = dt.NewRow();
- dr[0] = i;
- dr[1] = "項 " + i.ToString();
- dr[2] = DateTime.Now;
- dr[3] = (i % 2 != 0) ? true : false;
- dt.Rows.Add(dr);
- }
- dataGrid1.DataSource = new DataView(dt);
- dataGrid1.DataBind();
更多的操作:
1.創建表及插入列
- DataTable dt=new DataTable();
- dt.Colunmns.Add("Name",System.Type.GetType("System.String"));
2.插入行
- DataRow newrow = dt.NewRow();
- newrow[0]="aa";
- dt.Rows.Add(newrow);
3.排序
- DataView dv = dt.DefaultView;
- dv.Sort = "Name Desc";
- DataTable dt1 = dv.ToTable();
4.指定位置插入行
- DataTable dt = new DataTable("表名");
- DataRow dr = dt.NewRow();
- dr[0]="安江聯社戶外模";
- dr[1] = "555";
- dr[2] = "200707";
- dr[3] = "0.00";
- dr[4] = "0.00";
- dr[5] = "0.00";
- dr[6] = "0.00";
- dt.Rows.Add(dr); //在最後插入行
- dtb1.Rows.InsertAt(dr,j); //j為指定的行的位置插入;
- dataGridView1.DataSource = dt;
