SqlCeCommandBuilder 类

提供一种方法,以自动生成用于协调对 DataSet 所做的更改和关联数据库的单表命令。无法继承此类。

命名空间:  System.Data.SqlServerCe
程序集:  System.Data.SqlServerCe(在 System.Data.SqlServerCe.dll 中)

语法

声明
Public NotInheritable Class SqlCeCommandBuilder _
    Inherits DbCommandBuilder
用法
Dim instance As SqlCeCommandBuilder
public sealed class SqlCeCommandBuilder : DbCommandBuilder
public ref class SqlCeCommandBuilder sealed : public DbCommandBuilder
[<SealedAttribute>]
type SqlCeCommandBuilder =  
    class
        inherit DbCommandBuilder
    end
public final class SqlCeCommandBuilder extends DbCommandBuilder

注释

但是,如果设置了 SelectCommand 属性,则可以创建一个 SqlCeCommandBuilder 对象来自动生成用于单表更新的 Transact-SQL 语句。

每当设置了 DataAdapter 属性,SqlCeCommandBuilder 就将其本身注册为 RowUpdating 事件的侦听器。一次只能将一个 SqlCeDataAdapter 与一个 SqlCeCommandBuilder 对象互相关联。

为了生成 INSERT、UPDATE 或 DELETE 语句,SqlCeCommandBuilder 会自动使用 SelectCommand 属性来检索所需的元数据集。如果在检索元数据后(例如在第一次更新后)更改 SelectCommand,则应调用 RefreshSchema()()()() 方法来更新元数据。

SelectCommand 还必须至少返回一个主键列或唯一的列。如果什么都没有返回,就会产生 InvalidOperation 异常,并且不生成命令。

SqlCeCommandBuilder 还使用由 SelectCommand 引用的 ConnectionTransaction 属性。如果修改了这些属性中的任何一个或者替换了 SelectCommand 本身,则您应调用 RefreshSchema()()()()。否则,InsertCommandUpdateCommandDeleteCommand 属性将保留它们以前的值。

如果调用 Dispose()()()(),则会解除 SqlCeCommandBuilder 与 SqlCeDataAdapter 的关联,并且不再使用生成的命令。

示例

下面的示例使用 SqlCeCommand 以及 SqlCeDataAdapterSqlCeConnection 从数据源选择行。将传递给此示例一个连接字符串、一个查询字符串和一个表示数据库表名称的字符串。然后该示例创建一个 SqlCeCommandBuilder。然后,数据适配器使用此命令生成器更新本地数据库中已修改的 DataSet。

Try
    Dim conn As New SqlCeConnection("Data Source = MyDatabase.sdf")
    conn.Open()

    Dim cmd As SqlCeCommand = conn.CreateCommand()
    cmd.CommandText = "SELECT * FROM employees"

    Dim adp As New SqlCeDataAdapter(cmd)

    Dim cb As New SqlCeCommandBuilder()
    cb.DataAdapter = adp

    MessageBox.Show(cb.GetUpdateCommand().CommandText)
    MessageBox.Show(cb.GetInsertCommand().CommandText)
    MessageBox.Show(cb.GetDeleteCommand().CommandText)

    Dim ds As New DataSet("test")
    adp.Fill(ds)

    ' Modify the contents of the DataSet
    '
    ds.Tables(0).Rows(0)("First Name") = "Joe"

    adp.Update(ds)

Catch e1 As Exception
    Console.WriteLine(e1.ToString())
End Try
try
{
    SqlCeConnection conn = new SqlCeConnection("Data Source = MyDatabase.sdf");
    conn.Open();

    SqlCeCommand cmd = conn.CreateCommand();
    cmd.CommandText = "SELECT * FROM employees";

    SqlCeDataAdapter adp = new SqlCeDataAdapter(cmd);

    SqlCeCommandBuilder cb = new SqlCeCommandBuilder();
    cb.DataAdapter = adp;

    MessageBox.Show(cb.GetUpdateCommand().CommandText);
    MessageBox.Show(cb.GetInsertCommand().CommandText);
    MessageBox.Show(cb.GetDeleteCommand().CommandText);

    DataSet ds = new DataSet("test");
    adp.Fill(ds);

    // Modify the contents of the DataSet
    //
    ds.Tables[0].Rows[0]["First Name"] = "Joe";

    adp.Update(ds);

}
catch (Exception e1)
{
    Console.WriteLine(e1.ToString());
}

继承层次结构

System. . :: . .Object
  System. . :: . .MarshalByRefObject
    System.ComponentModel. . :: . .Component
      System.Data.Common. . :: . .DbCommandBuilder
        System.Data.SqlServerCe..::..SqlCeCommandBuilder

线程安全

Any public static (Shared in Microsoft Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

请参阅

参考

SqlCeCommandBuilder 成员

System.Data.SqlServerCe 命名空间