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";
}
}
}