• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

C#DataSet、DataTable、DataRow、DataColumn数据集应用大全

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

一、数据集基本应用

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.其它

 

1.1 指示DataTable中的字符串比较是否区分大小写

 

方式一:指示DataSet的CaseSensitive

 

userDataSet.CaseSensitive = true;



DataRow[] AryDR = userDataSet.Tables["users"].Select("CNAME = 'yy'");

 

 

方式二:指示DataTable的CaseSensitive

 

userDataSet.Tables["users"].CaseSensitive = true;



DataRow[] AryDR = userDataSet.Tables["users"].Select("CNAME = 'yy'");

 

 

1.2指示在尝试执行任何更新操作时是否遵循约束规则

 

方式一:指示DataSet的EnforceConstraints

 

userDataSet.EnforceConstraints = false;



DataRow thisRow = userDataSet.Tables["Users"].NewRow();



thisRow["OID"] = 5;



thisRow["sex"] = "m";



userDataSet.Tables["Users"].Rows.Add(thisRow); //如果没有置EnforceConstraints,则会添加失败。

 

 

1.3 获取与 DataSet 相关的自定义用户信息的集合

 

方式一:利用DataSet的ExtendedProperties

 

PropertyCollection properties = userDataSet.ExtendedProperties;



//Add a timestamp value to the PropertyCollection.



if (!properties.ContainsKey("TimeStamp"))



properties.Add("TimeStamp", DateTime.Now);



PropertyCollection properties1 = userDataSet.ExtendedProperties;



MessageBox.Show(((DateTime)properties1["TimeStamp"]).ToString());

 

 

方式二:利用DataTable的ExtendedProperties

 

PropertyCollection properties = userDataSet.Tables["users"].ExtendedProperties;



//Add a timestamp value to the PropertyCollection.



if (!properties.ContainsKey("TimeStamp"))



properties.Add("TimeStamp", DateTime.Now);



PropertyCollection properties1 = userDataSet.Tables["users"].ExtendedProperties;



MessageBox.Show(((DateTime)properties1["TimeStamp"]).ToString());

 

 

1.4获取用于将表链接起来并允许从父表浏览到子表的关系的集合

 

方式一:利用DataSet的Relations

 

DataColumn[] aryChildColumn = userDataSet.Relations[0].ChildColumns;



DataColumn[] aryParentColumn = userDataSet.Relations[0].ParentColumns;



MessageBox.Show(aryChildColumn[0].ColumnName + " " + aryParentColumn[0].ColumnName);

 

 

1.5为每个 DataTable 返回带有一个结果集的DataTableReader

 

方式一:利用DataSet.CreateDataReader()

 

using (DataTableReader reader = userDataSet.CreateDataReader())



{



do



{



if (!reader.HasRows)



{



Console.WriteLine("Empty DataTableReader");



}



else



{



while (reader.Read()) //下一个数据行



{



for (int i = 0; i < reader.FieldCount; i++)



{



Console.Write(reader[i] + " ");



}



Console.WriteLine();



}



}



Console.WriteLine("========================");



} while (reader.NextResult());//下一个数据表



}

 

 

方式二:利用DataTable.CreateDataReader()

 

1.6返回存储在 DataSet 中的数据的 XML 表示形式

 

方式一:利用DataSet.GetXml();

 

MessageBox.Show(userDataSet.GetXml());

 

 

1.7获取或设置充当数据表主键的列的数组

 

方式一:设置DataTable.PrimaryKey

 

DataColumn[] keys = new DataColumn[1];



keys[0] = userDataSet.Tables["Users"].Columns["OID"];



userDataSet.Tables["Users"].PrimaryKey = keys;

 

 

1.8在加载数据时关闭通知、索引维护和约束

 

方式一:DataTable.BeginLoadData()和 EndLoadData()。

 

1.9将 DataRow 复制到 DataTable 中,保留任何属性设置以及初始值和当前值

 

方式一:利用DataTable.ImportRow

 

DataSet copyDS = new UserDataSet();



copyDS.Tables["users"].ImportRow(userDataSet.Tables["users"].Rows[0]);



MessageBox.Show(



copyDS.Tables["users"].Rows[0]["cname", DataRowVersion.Original]



+ " " +



  copyDS.Tables["users"].Rows[0]["cname", DataRowVersion.Current]);

 

 

1.10查找和更新特定行。如果找不到任何匹配行,则使用给定值创建新行

 

方式一:利用DataTable.LoadDataRow

 

DataRow newRow = userDataSet.Tables["users"].NewRow();



newRow[

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap