SqlCeCommandBuilder 类
提供一种方法,以自动生成用于协调对 DataSet 所做的更改和关联数据库的单表命令。无法继承此类。
继承层次结构
System.Object
System.MarshalByRefObject
System.ComponentModel.Component
System.Data.Common.DbCommandBuilder
System.Data.SqlServerCe.SqlCeCommandBuilder
命名空间: 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
SqlCeCommandBuilder 类型公开以下成员。
构造函数
名称 | 说明 | |
---|---|---|
SqlCeCommandBuilder() | 初始化 SqlCeCommandBuilder 类的一个新实例。 | |
SqlCeCommandBuilder(SqlCeDataAdapter) | 使用关联的 SqlCeDataAdapter 和 SqlCeCommand 对象初始化 SqlCeCommandBuilder 类的新实例。 |
页首
属性
名称 | 说明 | |
---|---|---|
CanRaiseEvents | (继承自 Component) | |
CatalogLocation | SQL Server Compact 不支持。 (覆盖 DbCommandBuilder.CatalogLocation。) | |
CatalogSeparator | SQL Server Compact 不支持。 (覆盖 DbCommandBuilder.CatalogSeparator。) | |
ConflictOption | 指定哪个 ConflictOption 将由 SqlCeCommandBuilder 使用。 (覆盖 DbCommandBuilder.ConflictOption。) | |
Container | (继承自 Component) | |
DataAdapter | 获取或设置一个为其自动生成 SQL 语句的 SqlCeDataAdapter 对象。 | |
DesignMode | (继承自 Component) | |
Events | (继承自 Component) | |
QuotePrefix | 获取或设置指定其名称包含空格或保留标记等字符的 SQL Server 数据库对象(例如,表或列)时使用的开始字符。 (覆盖 DbCommandBuilder.QuotePrefix。) | |
QuoteSuffix | 获取或设置指定其名称包含空格或保留标记等字符的 SQL Server 数据库对象(例如,表或列)时使用的结束字符。 (覆盖 DbCommandBuilder.QuoteSuffix。) | |
SchemaSeparator | SQL Server Compact 不支持。 (覆盖 DbCommandBuilder.SchemaSeparator。) | |
SetAllValues | (继承自 DbCommandBuilder) | |
Site | (继承自 Component) |
页首
方法
页首
事件
名称 | 说明 | |
---|---|---|
Disposed | (继承自 Component) |
页首
注释
但是,如果设置了 SelectCommand 属性,则可以创建一个 SqlCeCommandBuilder 对象来自动生成用于单表更新的 Transact-SQL 语句。
每当设置了 DataAdapter 属性,SqlCeCommandBuilder 就将其本身注册为 RowUpdating 事件的侦听器。一次只能将一个 SqlCeDataAdapter 与一个 SqlCeCommandBuilder 对象互相关联。
为了生成 INSERT、UPDATE 或 DELETE 语句,SqlCeCommandBuilder 会自动使用 SelectCommand 属性来检索所需的元数据集。如果在检索元数据后(例如在第一次更新后)更改 SelectCommand,则应调用 RefreshSchema() 方法来更新元数据。
SelectCommand 还必须至少返回一个主键列或唯一的列。如果什么都没有返回,就会产生 InvalidOperation 异常,并且不生成命令。
SqlCeCommandBuilder 还使用由 SelectCommand 引用的 Connection 和 Transaction 属性。如果修改了这些属性中的任何一个或者替换了 SelectCommand 本身,则您应调用 RefreshSchema()。否则,InsertCommand、UpdateCommand 和 DeleteCommand 属性将保留它们以前的值。
如果调用 Dispose(),则会解除 SqlCeCommandBuilder 与 SqlCeDataAdapter 的关联,并且不再使用生成的命令。
示例
下面的示例使用 SqlCeCommand 以及 SqlCeDataAdapter 和 SqlCeConnection 从数据源选择行。将传递给此示例一个连接字符串、一个查询字符串和一个表示数据库表名称的字符串。然后该示例创建一个 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());
}
线程安全
此类型的任何公共静态(在 Microsoft Visual Basic 中为共享)成员是线程安全的。不保证所有实例成员都对于线程安全的。