c数据集.docx
《c数据集.docx》由会员分享,可在线阅读,更多相关《c数据集.docx(14页珍藏版)》请在冰豆网上搜索。
c数据集
C#数据集应用大全
2012-03-1416:
59 631人阅读 评论(0) 收藏 举报
花了几天时间终于把C#数据集的一些基本应用都整理完了,做为C#数据库应用开发人员来说的话,这应该是必备知识了,
一、数据集基本应用
1.表格新增记录
方式一:
利用BindingSource的AddNew
//新增记录,推荐使用,光标位置处于当前新增记录,且正处理编辑状态
DataRowthisRow=((DataRowView)usersBindingSource.AddNew()).Row;
thisRow["OID"]=5;
thisRow["CNAME"]="新增用户";
thisRow["sex"]="m";
方式二:
利用DataTable的NewRow
//新增记录(不建议使用,因为这种方式Rows.Add时并不处于编辑状态时会受约束影响,且新增时光标不会自动移动该条记录)
DataRowthisRow=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中,保存时不会更新
DataRowthisRow=getCurrentDataRow(usersBindingSource);
if(thisRow!
=null)
userDataSet.Tables["Users"].Rows.Remove(thisRow);
方式三:
利用DataRow的Delete
//删除当前记录,不推荐使用,BindingSource可以更简洁
DataRowthisRow=getCurrentDataRow(usersBindingSource);
if(thisRow!
=null)
thisRow.Delete();
3.表格修改记录
方式一:
利用DataRowObject[列名]直接修改
DataRowthisRow=getCurrentDataRow(usersBindingSource);
if(thisRow!
=null)
{
thisRow.BeginEdit();
thisRow["CNAME"]="修改的名称";
thisRow.EndEdit();
}
4.表格查找和筛选记录
方式一:
利用DataRowCollection.find查找
DataColumn[]keys=newDataColumn[1];
keys[0]=userDataSet.Tables["Users"].Columns["OID"];
userDataSet.Tables["Users"].PrimaryKey=keys;
DataRowfindRow=userDataSet.Tables["Users"].Rows.Find("1");
if(findRow==null)
{
MessageBox.Show("没有找到");
}
else
{
MessageBox.Show("成功找到,CNAME="+findRow["CNAME"]);
}
方式二:
利用BindingSource.find查找
inti=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(inti=0;i {
DataRowdr=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.数据集数据和结构的复制
方式一:
整个数据集的复制
DataSetcopyDS=userDataSet.Copy();
方式二:
只复制单个表
DataSetcopyDS=newDataSet();
copyDS.Tables.Add(userDataSet.Tables["users"].Copy());
方式三:
只复制数据集的结构
copyDS=userDataSet.Clone();
MessageBox.Show(copyDS.Tables["users"].Rows.Count.ToString());
9.获取脏数据
方式一:
整个数据集的脏数据
copyDS=userDataSet.GetChanges();
方式二:
获取单个表的脏数据
DataTabledt=userDataSet.Tables["users"].GetChanges();
10.数据集的数据合并
方式一:
整个数据集的DataSet.Merge合并
ds.Merge(userDataSet);
方式二:
单个表的DataTable.Merge合并
ds.Merge(userDataSet.Tables["users"]);
11.数据集的数据回滚
方式一:
数据集的数据回滚
userDataSet.RejectChanges();
方式二:
数据表的数据回滚
userDataSet.Tables["users"].RejectChanges();
方式三:
数据行的数据回滚
DataRowdr=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
DataColumnCollectiondcc=userDataSet.Tables["users"].Columns;
for(inti=0;i {
DataColumndc=dcc[i];
MessageBox.Show(dc.ColumnName);
}
16获取属于该表的行的集合
方式一:
利用DataTable.Rows
DataRowCollectiondrc=userDataSet.Tables["users"].Rows;
for(inti=0;i {
DataRowdr=drc[i];
MessageBox.Show((string)dr["CNAME"]);
}
17 获取或设置存储在指定列中的数据
方式一:
利用DataRowObject[列名]来访问或设置。
DataRowdr=getCurrentDataRow(usersBindingSource);
MessageBox.Show((string)dr["CNAME"]);
18获取记录行的状态。
方式一:
利用DataRow.RowState获取
DataRowdr=getCurrentDataRow(usersBindingSource);
switch(dr.RowState)
{
caseDataRowState.Added:
MessageBox.Show("新增的记录");
break;
caseDataRowState.Deleted:
MessageBox.Show("删除的记录");
break;
caseDataRowState.Detached:
MessageBox.Show("不属于任何DataRowCollection的状态");
break;
caseDataRowState.Modified:
MessageBox.Show("修改的记录");
break;
caseDataRowState.Unchanged:
MessageBox.Show("未变化的记录");
break;
default:
break;
};
19 对记录行开始编辑操作、取消对该行的当前编辑、终止发生在该行的编辑
方式一:
利用DataRow的BeginEdit、CancelEdit、EndEdit
DataRowdr=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指示
DataColumncolumn=newDataColumn();
column.DataType=System.Type.GetType("System.Int32");
column.AutoIncrement=true;
column.AutoIncrementSeed=1000;
column.AutoIncrementStep=10;
//AddthecolumntoanewDataTable.
DataTabletable=newDataTable("table");
table.Columns.Add(column);
DataRowdr=table.NewRow();
MessageBox.Show(Convert.ToString((int)dr[0]));
DataRowdr1=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
DataColumnCollectiondcc=userDataSet.Tables["users"].Columns;
for(inti=0;i {
DataColumndc=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
DataTableCollectionAryTable=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
publicstaticDataRowgetCurrentDataRow(BindingSourcebindSource)
{
if(!
typeof(DataRowView).IsInstanceOfType(bindSource.Current))
returnnull;
DataRowViewdrv=(DataRowView)bindSource.Current;
if(drv==null)
returnnull;
else
returndrv.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;