使用CommandBuilder对象

11.8  使用CommandBuilder对象

前面我们介绍了DataSet对象的4种典型功能,包括数据的提取、删除、更新和插入。实际上我们是对DataSet对象的4个属性分别定义相应的SQL语句来完成的。比如,对SelectCommand对象定义Select语句,对DeleteCommand对象定义Delete语句等。

每次都需要开发人员来设计这些SQL语句是不是很烦琐?有没有很简单的解决方法呢?这就是CommandBuilder对象。

.NET Framework中的每种数据提供者都有自己的CommandBuilder对象,比如,SqlCommandBulder对象就是SQL Server数据库提供者的命名绑定对象。OleDb数据提供者的对象就是OleDbCommandBuilder等。

11.8.1  CommandBuilder对象使用方法

要使用CommandBuilder对象,需要首先定义起一个实例,将该实例绑定到数据适配器对象,然后调用数据适配器对象的Update方法更新DataSet对象即可。比如下面的语句。

SqlCommandBuilder MyCb = new SqlCommandBuilder(MyAdapter);

MyAdapter.Update(MyDataSet, "T_STUDENT");

11.8.2  使用CommandBuilder对象更新

下面介绍使用CommandBuilder对象更新数据的实例。

在Visual Studio 2005中新建一个控制台项目。在Program..cs文件中输入下列代码。该项目完成和ConsoleApplication2一样的更新数据的功能,但是不再需要定义UpdateCommand属性的Update语句了。

//引用系统命名空间

using System;

using System.Data;

using System.Data.SqlClient;

//项目生成的命名空间

namespace ConsoleApplication5

{

    //项目中的类

    class Program

    {

        //项目执行入口

        static void Main()

        {

            string connectionString = GetConnectionString();

            //定义数据库连接对象

            SqlConnection connection = new SqlConnection(connectionString);

            //定义SQL字符串

            String MySQL = "Select * From  T_STUDENT;";

            //定义数据适配器对象

            SqlDataAdapter MyAdapter = new SqlDataAdapter(MySQL, connection);

            {

                try

                {

                    //打开数据库连接

                    connection.Open();

                    //定义数据集对象

                    DataSet MyDataSet = new DataSet();

                    //用表T_STUDENT的内容填充数据集对象

                    MyAdapter.Fill(MyDataSet, "T_STUDENT");

                    //定义数据行对象

                    DataRow MyRow =

                        MyDataSet.Tables["T_STUDENT"].Rows[0];

                    //读者可以在这里更改字段的取值,然后可以发现数据库中的数据会被更改

                    MyRow["T_S_NAME"] = "赵军";

                    //定义命令绑定对象

                    SqlCommandBuilder MyCb=new SqlCommandBuilder(MyAdapter);

                    //提交更新

                    MyAdapter.Update(MyDataSet, "T_STUDENT");

                    Console.WriteLine("成功更新表中的数据");

                }

                catch (SqlException ex)

                {

                    Console.WriteLine(ex.ToString());

                    Console.ReadLine();

                }

                finally

                {

                    connection.Close();

                    Console.ReadLine();

                    Console.WriteLine("成功关闭到SQL Server 2005数据库的连接");

                }

            }

        }

        //返回连接字符串的函数

        static private string GetConnectionString()

        {

            return " Integrated Security=Yes;

                       Initial Catalog=DB_student;

                       Server=Mynetserver";

        }

    }

}

*光盘文件:/ch11/ConsoleApplication5。

11.8.3  使用CommandBuilder对象插入

下面介绍使用CommandBuilder对象插入数据的实例。

在Visual Studio 2005中新建一个控制台项目。在Program..cs文件中输入下列代码。该项目完成和ConsoleApplication3一样的更新数据的功能,但是不再需要定义InsertCommand属性的Insert语句了。

//引用系统命名空间

using System;

using System.Data;

using System.Data.SqlClient;

//项目生成的命名空间

namespace ConsoleApplication6

{

    //项目中的类

    class Program

    {

        //项目执行入口

        static void Main()

        {

            string connectionString = GetConnectionString();

            //定义数据库连接对象

            SqlConnection connection=new SqlConnection(connectionString);

            //定义SQL字符串

            String MySQL = "Select * From  T_STUDENT;";

            //定义数据适配器对象

            SqlDataAdapter MyAdapter = new SqlDataAdapter(MySQL, connection);

            {

                try

                {

                    //打开数据库连接

                    connection.Open();

                    MyAdapter.SelectCommand = new SqlCommand(MySQL, connection);

                    //定义数据集对象

                    DataSet MyDataSet = new DataSet();

                    //填充数据集的数据

                    MyAdapter.Fill(MyDataSet, "T_STUDENT");

                    //定义数据表对象

                    DataTable MyTable =

                      MyDataSet.Tables["T_STUDENT"];

                    //定义一个全新的数据行对象

                    DataRow MyRow = MyTable.NewRow();

                    //定义数据行中各字段的值

                    MyRow["T_S_NAME"] = "陈超";

                    MyRow["T_S_SEX"] = "男";

                    MyRow["T_S_BIRTHDAY"] = "1985-09-11";

                    MyRow["T_S_ID"] = 2002080524;

                    MyRow["T_S_NATIONALITY"] = "汉";

                    MyRow["T_S_PHOTO"] = null;

                    //在内存中的表对象中添加一个新行,但此时新行的内容没有更新到数据源中

                    MyTable.Rows.Add(MyRow);

                    //定义命令绑定对象

                    SqlCommandBuilder MyCb=new SqlCommandBuilder (MyAdapter);

                    //调用数据适配器的Update方法,将新插入的数据更新到数据源中

                    MyAdapter.Update(MyDataSet, "T_STUDENT");

                    Console.WriteLine("成功更新数据库的数据!");

                }

                catch (SqlException ex)

                {

                    Console.WriteLine(ex.ToString());

                    Console.ReadLine();

                }

                finally

                {

                    connection.Close();

                    Console.ReadLine();

                    Console.WriteLine("成功关闭到SQL Server 2005数据库的连接");

                }

            }

        }

        //返回连接字符串的函数

        static private string GetConnectionString()

        {

            return "Integrated Security=Yes;

                      Initial Catalog=DB_student;

                      Server=Mynetserver";

        }

    }

}

 
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值