DataTable 添加列、設置主鍵、添加行、查詢
對於數據庫的操作,資料太多,大家也比較熟悉。
但有時數據量較少,但更新頻繁的變量操作,通常采用自定義結構,但自定義結構的可維護性和靈活性就比不上臨時表,我們可以先用DataTable做為內存臨時表,以數據庫操作的方式靈活添加列、行,完成 主鍵設置、查詢、更新等操作,還可以保存為xml文件。
假設在當前類作用域有全局對象
public
static DataTable dtRefresh =
new DataTable();
我們在某個測試函數中添加下面的測試代碼:
為了方便存儲為xml文件,需要設置表名:
dtRefresh.TableName =
"
刷新任務
";
為臨時表添加表結構,既列名:
dtRefresh.Columns.Add(
"
數量
",
typeof(
int));
dtRefresh.Columns.Add( " 頻率 ", typeof( int));
dtRefresh.Columns.Add( " 自動關閉延遲 ", typeof( int));
dtRefresh.Columns.Add( " Url ", typeof( string));
dtRefresh.Columns.Add( " 頻率 ", typeof( int));
dtRefresh.Columns.Add( " 自動關閉延遲 ", typeof( int));
dtRefresh.Columns.Add( " Url ", typeof( string));
設置其中一個列Url為主鍵:
DataColumn[] clos =
new DataColumn[
1];
clos[ 0] = dtRefresh.Columns[ " Url "];
dtRefresh.PrimaryKey = clos;
clos[ 0] = dtRefresh.Columns[ " Url "];
dtRefresh.PrimaryKey = clos;
為表添加一行測試記錄:
注意:添加行時,應先聲明行,在需要用時再賦予對象實體,這樣的目的是為了突出每次添加新行時,只需賦予一個dtRefresh.NewRow()返回的對象即可,而不用重新聲明一個行對象名。因為類操作是傳引用,如果一個行對象名賦予一個表,再修改這個對象名的內容,表中內容會跟着修改,所以每次添加行時要重用行名但避免重用對象。
dr = dtRefresh.NewRow();
dr[ " 數量 "] = 100;
dr[ " 頻率 "] = 100;
dr[ " 自動關閉延遲 "] = 100;
dr[ " Url "] = " http://www.baidu.com/ ";
dtRefresh.Rows.Add(dr);
執行查詢:
DataRow[] drArr = dtRefresh.Select(
"
Url = \'http://www.baidu.com/\'
");
foreach (var item in drArr)
{
txb.Text += item[ " Url "].ToString() + Environment.NewLine;
}
foreach (var item in drArr)
{
txb.Text += item[ " Url "].ToString() + Environment.NewLine;
}
根據查詢條件,更新記錄:
"
Url = \'http://www.baidu.com/\'
");
drArr[ 0][ " Url "] = " g.cn ";
foreach (var item in drArr)
{
txb.Text += item[ " Url "].ToString() + Environment.NewLine;
}
DataRow[] drArr = dtRefresh.Select(
drArr[ 0][ " Url "] = " g.cn ";
foreach (var item in drArr)
{
txb.Text += item[ " Url "].ToString() + Environment.NewLine;
}
寫入XML文件:
dtRefresh.WriteXml(
@"
d:\1.xml
");