c# DataSet DataTable DataColumn DataRow資料操作集
阿新 • • 發佈:2019-01-23
一、資料集基本應用
1.表格新增記錄
方式一:利用BindingSource的AddNew
//新增記錄,推薦使用,游標位置處於當前新增記錄,且正處理編輯狀態
DataRow thisRow = ((DataRowView)usersBindingSource.AddNew()).Row;
thisRow["OID"] = 5;
thisRow["CNAME"] = "新增使用者";
thisRow["sex"] = "m";
方式二:利用DataTable的NewRow
//新增記錄(不建議使用,因為這種方式Rows.Add時並不處於編輯狀態時會受約束影響,且新增時游標不會自動移動該條記錄)
DataRow thisRow = userDataSet.Tables["Users"].NewRow();
thisRow["OID"] = 5;
thisRow["CNAME"] = "新增使用者";
thisRow["sex"] = "m";
userDataSet.Tables["Users"].Rows.Add(thisRow);
2.表格刪除記錄
方式一:利用BindingSource的RemoveCurrent
if (usersBindingSource.Current != null)
//刪除當前記錄,推薦使用
usersBindingSource.RemoveCurrent();
方式二:利用DataRowCollection的Remove
//刪除當前記錄,不推薦使用,這種方式不會記錄到RowState中,儲存時不會更新
DataRow thisRow = getCurrentDataRow(usersBindingSource);
if (thisRow != null)
userDataSet.Tables["Users"].Rows.Remove(thisRow);
方式三:利用DataRow的Delete
//刪除當前記錄,不推薦使用,BindingSource可以更簡潔
DataRow thisRow = getCurrentDataRow(usersBindingSource);
if (thisRow != null)
thisRow.Delete();
3.表格修改記錄
方式一:利用DataRowObject[列名]直接修改
DataRow thisRow = getCurrentDataRow(usersBindingSource);
if (thisRow != null)
{
thisRow.BeginEdit();
thisRow["CNAME"] = "修改的名稱";
thisRow.EndEdit();
}
4.表格查詢和篩選記錄
方式一:利用DataRowCollection.find查詢
DataColumn[] keys = new DataColumn[1];
keys[0] = userDataSet.Tables["Users"].Columns["OID"];
userDataSet.Tables["Users"].PrimaryKey = keys;
DataRow findRow = userDataSet.Tables["Users"].Rows.Find("1");
if (findRow == null)
{
MessageBox.Show("沒有找到");
}
else
{
MessageBox.Show("成功找到,CNAME = " + findRow["CNAME"]);
}
方式二:利用BindingSource.find查詢
int i = usersBindingSource.Find("OID", "1");
if (i >= 0)
MessageBox.Show("成功找到,CNAME = " +
userDataSet.Tables["users"].Rows[i]["CNAME"]);
方式三:利用DataTable.Select獲得DataRow陣列
DataRow[] AryDr = userDataSet.Tables["users"].Select("OID > 1");
for (int i = 0; i < AryDr.Length; i++)
{
DataRow dr = AryDr[i];
MessageBox.Show(Convert.ToString((int)dr["OID"]));
}
5.表格記錄的移動
方式一:採用BindingSource的方法或position屬性實現。
//指定定位到哪一行,Position不會隨表格列排序而變化,0不一定就是表格的第一行
usersBindingSource.Position = 0;
//移動到上一條,對於表格列排序後,上一條不定是介面顯示錶格的上一條
usersBindingSource.MovePrevious();
usersBindingSource.MoveNext();//移動到下一條
usersBindingSource.MoveFirst();
usersBindingSource.MoveLast();
6.表格的過濾
方式一:利用BindingSource的Filter來實現
usersBindingSource.Filter = "OID > 1";
7.資料集清空
方式一:利用DataTable.Clear(),注意這種不會保留刪除狀態,儲存時不會真正刪除
userDataSet.Tables["users"].Clear();
方式二:利用DataTable.Rows.Clear刪除,注意這種不會保留刪除狀態,儲存時不會真正刪除
userDataSet.Tables["users"].Rows.Clear();
方式三:利用BindingSource.RemoveCurrent迴圈刪除全部記錄,這種就會保留刪除狀態。
while (usersBindingSource.Current != null)
usersBindingSource.RemoveCurrent();
8.資料集資料和結構的複製
方式一:整個資料集的複製
DataSet copyDS = userDataSet.Copy();
方式二:只複製單個表
DataSet copyDS = new DataSet();
copyDS.Tables.Add(userDataSet.Tables["users"].Copy());
方式三:只複製資料集的結構
copyDS = userDataSet.Clone();
MessageBox.Show(copyDS.Tables["users"].Rows.Count.ToString());
9.獲取髒資料
方式一:整個資料集的髒資料
copyDS = userDataSet.GetChanges();
方式二:獲取單個表的髒資料
DataTable dt = userDataSet.Tables["users"].GetChanges();
10.資料集的資料合併
方式一:整個資料集的DataSet.Merge合併
ds.Merge(userDataSet);
方式二:單個表的DataTable.Merge合併
ds.Merge(userDataSet.Tables["users"]);
11.資料集的資料回滾
方式一:資料集的資料回滾
userDataSet.RejectChanges();
方式二:資料表的資料回滾
userDataSet.Tables["users"].RejectChanges();
方式三:資料行的資料回滾
DataRow dr = getCurrentDataRow(usersBindingSource);
if (dr != null)
dr.RejectChanges();
12.資料集從資料庫取數
方式一:利用SqlDataAdapter.Fill來填充資料表
this.usersTableAdapter.Fill(this.userDataSet.Users);
13.資料集更新到資料庫
方式一:利用SqlDataAdapter.Update來更新到資料庫
this.Validate();
this.usersBindingSource.EndEdit();
if (this.userDataSet.HasChanges())
{
this.usersTableAdapter.Update(this.userDataSet.Users);
MessageBox.Show("儲存成功!");
}
14.判斷資料集變更
方式一:利用DataSet.HasChanges()
15獲取資料集表列集合
方式一:利用DataTable.Columns
DataColumnCollection dcc = userDataSet.Tables["users"].Columns;
for (int i = 0; i < dcc.Count; i++)
{
DataColumn dc = dcc[i];
MessageBox.Show(dc.ColumnName);
}
16獲取屬於該表的行的集合
方式一:利用DataTable.Rows
DataRowCollection drc = userDataSet.Tables["users"].Rows;
for (int i = 0; i < drc.Count; i++)
{
DataRow dr = drc[i];
MessageBox.Show((string)dr["CNAME"]);
}
17 獲取或設定儲存在指定列中的資料
方式一:利用DataRowObject[列名]來訪問或設定。
DataRow dr = getCurrentDataRow(usersBindingSource);
MessageBox.Show((string)dr["CNAME"]);
18獲取記錄行的狀態。
方式一:利用DataRow.RowState獲取
DataRow dr = getCurrentDataRow(usersBindingSource);
switch (dr.RowState)
{
case DataRowState.Added:
MessageBox.Show("新增的記錄");
break;
case DataRowState.Deleted:
MessageBox.Show("刪除的記錄");
break;
case DataRowState.Detached:
MessageBox.Show("不屬於任何DataRowCollection的狀態");
break;
case DataRowState.Modified:
MessageBox.Show("修改的記錄");
break;
case DataRowState.Unchanged:
MessageBox.Show("未變化的記錄");
break;
default:
break;
};
19 對記錄行開始編輯操作、取消對該行的當前編輯、終止發生在該行的編輯
方式一:利用DataRow的BeginEdit、CancelEdit、EndEdit
DataRow dr = getCurrentDataRow(usersBindingSource);
dr.BeginEdit();
dr["CNAME"] = "yy";
if (((string)dr["CNAME",DataRowVersion.Original]).Equals("YY"))
dr.CancelEdit();
else
dr.EndEdit();
20 獲取或設定列中是否允許空值
方式一:利用DataColumn的AllowDBNull,注意這樣可以允許空字串
userDataSet.Tables["users"].Columns["tel"].AllowDBNull = false;
21指示列自動遞增
方式一:利用DataColumn的AutoIncrement指示
DataColumn column = new DataColumn();
column.DataType = System.Type.GetType("System.Int32");
column.AutoIncrement = true;
column.AutoIncrementSeed = 1000;
column.AutoIncrementStep = 10;
// Add the column to a new DataTable.
DataTable table = new DataTable("table");
table.Columns.Add(column);
DataRow dr = table.NewRow();
MessageBox.Show(Convert.ToString((int)dr[0]));
DataRow dr1 = table.NewRow();
MessageBox.Show(Convert.ToString((int)dr1[0]));
22 獲取列名
方式一:利用DataColumn.ColumnName
MessageBox.Show(userDataSet.Tables["users"].Columns[0].ColumnName);
23在建立新行時獲取或設定列的預設值
方式一:利用DataColumn.DefaultValue
userDataSet.Tables["users"].Columns["CNAME"].DefaultValue = "yy";
24 獲取設定列的只讀
方式一:DataColumn.Readonly
userDataSet.Tables["users"].Columns["tel"].ReadOnly = true;
//這一句會出錯,程式寫入都不允許
userDataSet.Tables["users"].Rows[0]["tel"] = "111";
25獲取資料集中的資料型別
方式一:利用DataColumn.DataType
DataColumnCollection dcc = userDataSet.Tables["users"].Columns;
for (int i = 0; i < dcc.Count; i++)
{
DataColumn dc = dcc[i];
MessageBox.Show(dc.DataType.ToString());
}
26計算列表達式的設定
方式一:利用DataColumn.Expression
userDataSet.Tables["users"].Columns["totalMoney"].Expression = " OID * 100 ";
27指示列的每一行中的值是否必須是唯一
方式一:利用DataColumn.Unique
userDataSet.Tables["users"].Columns["tel"].Unique = true;
28獲取包含在 DataSet 中的表的集合
方式一:利用DataSet的Tables
DataTableCollection AryTable = userDataSet.Tables;
MessageBox.Show(AryTable[0].TableName + " " + AryTable[1].TableName);
29 獲取 DataSet 所包含的資料的自定義檢視
方式一:利用DataSet的DefaultViewManager
方式二:利用DataTable的DefaultView
30.表格記錄新增、刪除、修改的控制
方式一:利用BindingSource的AllowEdit、AllowNew、AllowRemove
usersBindingSource.AllowNew = false;
31. 獲取表格的記錄數
方式一:利用BindingSource.Count
MessageBox.Show(usersBindingSource.Count.ToString());
方式二:利用DataTable.Rows.Count
32.獲取表格的當前行
方式一:利用bindingSource.Current
public static DataRow getCurrentDataRow(BindingSource bindSource)
{
if (!typeof(DataRowView).IsInstanceOfType(bindSource.Current))
return null;
DataRowView drv = (DataRowView)bindSource.Current;
if (drv == null)
return null;
else
return drv.Row;
}
33.獲取表格當前項的索引
方式一:利用BindingSource.Position
MessageBox.Show(usersBindingSource.Position.ToString());
1.表格新增記錄
方式一:利用BindingSource的AddNew
//新增記錄,推薦使用,游標位置處於當前新增記錄,且正處理編輯狀態
DataRow thisRow = ((DataRowView)usersBindingSource.AddNew()).Row;
thisRow["OID"] = 5;
thisRow["CNAME"] = "新增使用者";
thisRow["sex"] = "m";
方式二:利用DataTable的NewRow
//新增記錄(不建議使用,因為這種方式Rows.Add時並不處於編輯狀態時會受約束影響,且新增時游標不會自動移動該條記錄)
DataRow thisRow = userDataSet.Tables["Users"].NewRow();
thisRow["OID"] = 5;
thisRow["CNAME"] = "新增使用者";
thisRow["sex"] = "m";
userDataSet.Tables["Users"].Rows.Add(thisRow);
2.表格刪除記錄
方式一:利用BindingSource的RemoveCurrent
if (usersBindingSource.Current != null)
//刪除當前記錄,推薦使用
usersBindingSource.RemoveCurrent();
方式二:利用DataRowCollection的Remove
//刪除當前記錄,不推薦使用,這種方式不會記錄到RowState中,儲存時不會更新
DataRow thisRow = getCurrentDataRow(usersBindingSource);
if (thisRow != null)
userDataSet.Tables["Users"].Rows.Remove(thisRow);
方式三:利用DataRow的Delete
//刪除當前記錄,不推薦使用,BindingSource可以更簡潔
DataRow thisRow = getCurrentDataRow(usersBindingSource);
if (thisRow != null)
thisRow.Delete();
3.表格修改記錄
方式一:利用DataRowObject[列名]直接修改
DataRow thisRow = getCurrentDataRow(usersBindingSource);
if (thisRow != null)
{
thisRow.BeginEdit();
thisRow["CNAME"] = "修改的名稱";
thisRow.EndEdit();
}
4.表格查詢和篩選記錄
方式一:利用DataRowCollection.find查詢
DataColumn[] keys = new DataColumn[1];
keys[0] = userDataSet.Tables["Users"].Columns["OID"];
userDataSet.Tables["Users"].PrimaryKey = keys;
DataRow findRow = userDataSet.Tables["Users"].Rows.Find("1");
if (findRow == null)
{
MessageBox.Show("沒有找到");
}
else
{
MessageBox.Show("成功找到,CNAME = " + findRow["CNAME"]);
}
方式二:利用BindingSource.find查詢
int i = usersBindingSource.Find("OID", "1");
if (i >= 0)
MessageBox.Show("成功找到,CNAME = " +
userDataSet.Tables["users"].Rows[i]["CNAME"]);
方式三:利用DataTable.Select獲得DataRow陣列
DataRow[] AryDr = userDataSet.Tables["users"].Select("OID > 1");
for (int i = 0; i < AryDr.Length; i++)
{
DataRow dr = AryDr[i];
MessageBox.Show(Convert.ToString((int)dr["OID"]));
}
5.表格記錄的移動
方式一:採用BindingSource的方法或position屬性實現。
//指定定位到哪一行,Position不會隨表格列排序而變化,0不一定就是表格的第一行
usersBindingSource.Position = 0;
//移動到上一條,對於表格列排序後,上一條不定是介面顯示錶格的上一條
usersBindingSource.MovePrevious();
usersBindingSource.MoveNext();//移動到下一條
usersBindingSource.MoveFirst();
usersBindingSource.MoveLast();
6.表格的過濾
方式一:利用BindingSource的Filter來實現
usersBindingSource.Filter = "OID > 1";
7.資料集清空
方式一:利用DataTable.Clear(),注意這種不會保留刪除狀態,儲存時不會真正刪除
userDataSet.Tables["users"].Clear();
方式二:利用DataTable.Rows.Clear刪除,注意這種不會保留刪除狀態,儲存時不會真正刪除
userDataSet.Tables["users"].Rows.Clear();
方式三:利用BindingSource.RemoveCurrent迴圈刪除全部記錄,這種就會保留刪除狀態。
while (usersBindingSource.Current != null)
usersBindingSource.RemoveCurrent();
8.資料集資料和結構的複製
方式一:整個資料集的複製
DataSet copyDS = userDataSet.Copy();
方式二:只複製單個表
DataSet copyDS = new DataSet();
copyDS.Tables.Add(userDataSet.Tables["users"].Copy());
方式三:只複製資料集的結構
copyDS = userDataSet.Clone();
MessageBox.Show(copyDS.Tables["users"].Rows.Count.ToString());
9.獲取髒資料
方式一:整個資料集的髒資料
copyDS = userDataSet.GetChanges();
方式二:獲取單個表的髒資料
DataTable dt = userDataSet.Tables["users"].GetChanges();
10.資料集的資料合併
方式一:整個資料集的DataSet.Merge合併
ds.Merge(userDataSet);
方式二:單個表的DataTable.Merge合併
ds.Merge(userDataSet.Tables["users"]);
11.資料集的資料回滾
方式一:資料集的資料回滾
userDataSet.RejectChanges();
方式二:資料表的資料回滾
userDataSet.Tables["users"].RejectChanges();
方式三:資料行的資料回滾
DataRow dr = getCurrentDataRow(usersBindingSource);
if (dr != null)
dr.RejectChanges();
12.資料集從資料庫取數
方式一:利用SqlDataAdapter.Fill來填充資料表
this.usersTableAdapter.Fill(this.userDataSet.Users);
13.資料集更新到資料庫
方式一:利用SqlDataAdapter.Update來更新到資料庫
this.Validate();
this.usersBindingSource.EndEdit();
if (this.userDataSet.HasChanges())
{
this.usersTableAdapter.Update(this.userDataSet.Users);
MessageBox.Show("儲存成功!");
}
14.判斷資料集變更
方式一:利用DataSet.HasChanges()
15獲取資料集表列集合
方式一:利用DataTable.Columns
DataColumnCollection dcc = userDataSet.Tables["users"].Columns;
for (int i = 0; i < dcc.Count; i++)
{
DataColumn dc = dcc[i];
MessageBox.Show(dc.ColumnName);
}
16獲取屬於該表的行的集合
方式一:利用DataTable.Rows
DataRowCollection drc = userDataSet.Tables["users"].Rows;
for (int i = 0; i < drc.Count; i++)
{
DataRow dr = drc[i];
MessageBox.Show((string)dr["CNAME"]);
}
17 獲取或設定儲存在指定列中的資料
方式一:利用DataRowObject[列名]來訪問或設定。
DataRow dr = getCurrentDataRow(usersBindingSource);
MessageBox.Show((string)dr["CNAME"]);
18獲取記錄行的狀態。
方式一:利用DataRow.RowState獲取
DataRow dr = getCurrentDataRow(usersBindingSource);
switch (dr.RowState)
{
case DataRowState.Added:
MessageBox.Show("新增的記錄");
break;
case DataRowState.Deleted:
MessageBox.Show("刪除的記錄");
break;
case DataRowState.Detached:
MessageBox.Show("不屬於任何DataRowCollection的狀態");
break;
case DataRowState.Modified:
MessageBox.Show("修改的記錄");
break;
case DataRowState.Unchanged:
MessageBox.Show("未變化的記錄");
break;
default:
break;
};
19 對記錄行開始編輯操作、取消對該行的當前編輯、終止發生在該行的編輯
方式一:利用DataRow的BeginEdit、CancelEdit、EndEdit
DataRow dr = getCurrentDataRow(usersBindingSource);
dr.BeginEdit();
dr["CNAME"] = "yy";
if (((string)dr["CNAME",DataRowVersion.Original]).Equals("YY"))
dr.CancelEdit();
else
dr.EndEdit();
20 獲取或設定列中是否允許空值
方式一:利用DataColumn的AllowDBNull,注意這樣可以允許空字串
userDataSet.Tables["users"].Columns["tel"].AllowDBNull = false;
21指示列自動遞增
方式一:利用DataColumn的AutoIncrement指示
DataColumn column = new DataColumn();
column.DataType = System.Type.GetType("System.Int32");
column.AutoIncrement = true;
column.AutoIncrementSeed = 1000;
column.AutoIncrementStep = 10;
// Add the column to a new DataTable.
DataTable table = new DataTable("table");
table.Columns.Add(column);
DataRow dr = table.NewRow();
MessageBox.Show(Convert.ToString((int)dr[0]));
DataRow dr1 = table.NewRow();
MessageBox.Show(Convert.ToString((int)dr1[0]));
22 獲取列名
方式一:利用DataColumn.ColumnName
MessageBox.Show(userDataSet.Tables["users"].Columns[0].ColumnName);
23在建立新行時獲取或設定列的預設值
方式一:利用DataColumn.DefaultValue
userDataSet.Tables["users"].Columns["CNAME"].DefaultValue = "yy";
24 獲取設定列的只讀
方式一:DataColumn.Readonly
userDataSet.Tables["users"].Columns["tel"].ReadOnly = true;
//這一句會出錯,程式寫入都不允許
userDataSet.Tables["users"].Rows[0]["tel"] = "111";
25獲取資料集中的資料型別
方式一:利用DataColumn.DataType
DataColumnCollection dcc = userDataSet.Tables["users"].Columns;
for (int i = 0; i < dcc.Count; i++)
{
DataColumn dc = dcc[i];
MessageBox.Show(dc.DataType.ToString());
}
26計算列表達式的設定
方式一:利用DataColumn.Expression
userDataSet.Tables["users"].Columns["totalMoney"].Expression = " OID * 100 ";
27指示列的每一行中的值是否必須是唯一
方式一:利用DataColumn.Unique
userDataSet.Tables["users"].Columns["tel"].Unique = true;
28獲取包含在 DataSet 中的表的集合
方式一:利用DataSet的Tables
DataTableCollection AryTable = userDataSet.Tables;
MessageBox.Show(AryTable[0].TableName + " " + AryTable[1].TableName);
29 獲取 DataSet 所包含的資料的自定義檢視
方式一:利用DataSet的DefaultViewManager
方式二:利用DataTable的DefaultView
30.表格記錄新增、刪除、修改的控制
方式一:利用BindingSource的AllowEdit、AllowNew、AllowRemove
usersBindingSource.AllowNew = false;
31. 獲取表格的記錄數
方式一:利用BindingSource.Count
MessageBox.Show(usersBindingSource.Count.ToString());
方式二:利用DataTable.Rows.Count
32.獲取表格的當前行
方式一:利用bindingSource.Current
public static DataRow getCurrentDataRow(BindingSource bindSource)
{
if (!typeof(DataRowView).IsInstanceOfType(bindSource.Current))
return null;
DataRowView drv = (DataRowView)bindSource.Current;
if (drv == null)
return null;
else
return drv.Row;
}
33.獲取表格當前項的索引
方式一:利用BindingSource.Position
MessageBox.Show(usersBindingSource.Position.ToString());