C#数据集应用大全

    花了几天时间终于把C#数据集的一些基本应用都整理完了,做为C#数据库应用开发人员来说的话,这应该是必备知识了, C数据集应用大全 - ygguojian - 努力去飞吧 

一、数据集基本应用

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["OID"] = 1;

            newRow["CNAME"] = "rename yy";

            newRow["SEX"] = "f";

            userDataSet.Tables["users"].BeginLoadData();

           //LoadDataRow,以主键查找记录,当记录存在时只更新,不存在时新增记录

            DataRow row = userDataSet.Tables["users"].LoadDataRow(newRow.ItemArray, true);

            userDataSet.Tables["users"].EndLoadData();

1.11获取一个值,该值指示指定的列是否包含空值

方式一:利用DataRow.IsNull判断

            DataRow dr = getCurrentDataRow(usersBindingSource);

            if (dr.IsNull("tel"))

                MessageBox.Show("为空");

            else

                MessageBox.Show("不空");

1.12获取 DataRow 的父行.

方式一:对于数据集两个表存在主从关系的,可以通过DataRow.GetParentRow得到父记录

            DataRow dr = getCurrentDataRow(usersChildBindingSource);

            DataRow pdr = dr.GetParentRow(userDataSet.Relations[0]);

            MessageBox.Show((string)pdr["cname"]);

1.13 设置数据集列标题

方式一:利用DataColumn.Caption

            //注意设置数据表的标题,并不会更新表格的列标题,可以考虑实现一公用方法同步表格标题

            userDataSet.Tables["users"].Columns["CNAME"].Caption = "标题";

1.14 获取数据集的Scheme

方式一:利用DataSet.GetXmlSchema

MessageBox.Show(userDataSet.GetXmlSchema());

1.15 将xml架构应用于DataSet

方式一:利用DataSet. InferXmlSchema

1.16 数据集到XML的转化

方式一:DataSet.ReadXml将 XML 架构和数据读入 DataSet。

方式二:DataSet.ReadXmlSchema将 XML 架构读入 DataSet。

方式三:DataSet.WriteXml从 DataSet 写 XML 数据,还可以选择写架构

方式四:DataSet.WriteXmlSchema写 XML 架构形式的 DataSet 结构

1.17 数据集重置初始状态

方式一:DataSet.Reset

1.18 基于数据表的给定表达式的计算

方式一:利用DataTable的Compute

           int result = (int) userDataSet.Tables["users"].Compute("MIN(OID)", "");

           MessageBox.Show(result.ToString());

 
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值