现在的位置: 首页 > 综合 > 正文

SqlCommandBuilder 对象

2013年08月10日 ⁄ 综合 ⁄ 共 1458字 ⁄ 字号 评论关闭

DbDataAdapter.Update 方法 (DataTable) 为指定 DataTable 中每个已插入

、已更新或已删除的行调用相应的 INSERT、UPDATE 或 DELETE 语句。
当应用程序调用 Update 方法时,DbDataAdapter 根据 DataSet 中配置的索

引顺序为每一行检查 RowState 属性,并迭代执行所需的 INSERT、UPDATE 或

DELETE 语句。例如,由于 DataTable 中行的排序,Update 可能先执行一个

DELETE 语句,接着执行一个 INSERT 语句,然后再执行另一个 DELETE 语句

。 下面看一个例子:
void Query()
        {
           
             da = new SqlDataAdapter("select * from users", "data

source=.;Initial catalog=coment_db;Integrated Security=true");
            dt=new DataTable();
            da.Fill(dt);
            SqlCommandBuilder scb=new SqlCommandBuilder(da);
            dataGridView1.DataSource = dt;
        }
然后我们通过以下代码区调用:
  da.Update(dt);
            Query();

应注意,这些语句不是作为批处理进程执行的;每一行都是单独更新的。在必

须控制语句类型顺序的情况下(例如,INSERT 在 UPDATE 之前),应用程序

可以调用 GetChanges 方法。有关更多信息,请参见使用 DataAdapter 更新

数据源 (ADO.NET)。

如果未指定 INSERT、UPDATE 或 DELETE 语句,Update 方法会生成异常。但

是,如果设置 .NET Framework 数据提供程序的 SelectCommand 属性,则可

以创建 SqlCommandBuilder 或 OleDbCommandBuilder 对象来为单个表更新自

动生成 SQL 语句。然后,CommandBuilder 将生成任何其他未设置的 SQL 语

句。

SqlDataAdapter 不会自动生成实现 DataSet 的更改与关联的 SQL Server 实

例之间的协调所需的 Transact-SQL 语句。但是,如果设置了

SqlDataAdapter 的 SelectCommand 属性,则可以创建一个

SqlCommandBuilder 对象来自动生成用于单表更新的 Transact-SQL 语句。然

后,SqlCommandBuilder 将生成其他任何未设置的 Transact-SQL 语句。

每当设置了 DataAdapter 属性,SqlCommandBuilder 就将其本身注册为

RowUpdating 事件的侦听器。一次只能将一个 SqlDataAdapter 与一个

SqlCommandBuilder 对象(或相反)互相关联。

为了生成 INSERT、UPDATE 或 DELETE 语句,SqlCommandBuilder 会自动使用

SelectCommand 属性来检索所需的元数据集。如果在检索到元数据后(例如在

第一次更新后)更改 SelectCommand,则应调用 RefreshSchema 方法来更新

元数据。

SelectCommand 还必须至少返回一个主键列或唯一的列。如果什么都没有返回

,就会产生 InvalidOperation 异常,不生成命令。

 

 

抱歉!评论已关闭.