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 | 指定要由 SqlCeCommandBuilder 使用的 ConflictOption。 (覆寫 DbCommandBuilder.ConflictOption。) | |
Container | (繼承自 Component) | |
DataAdapter | 取得或設定會為其自動產生 SQL 陳述式的 SqlCeDataAdapter 物件。 | |
DesignMode | (繼承自 Component) | |
Events | (繼承自 Component) | |
QuotePrefix | 取得或設定開始字元 (一個或多個),當指定名稱包含空白或保留 Token 之類字元的 SQL Server 資料庫物件 (如資料表或資料行) 時,就可以使用。 (覆寫 DbCommandBuilder.QuotePrefix。) | |
QuoteSuffix | 取得或設定結束字元 (一個或多個),當指定名稱包含空白或保留 Token 之類字元的 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,從資料來源選取資料列。此範例會傳遞連接字串 (Connection String)、查詢字串,以及是資料庫資料表名稱的字串。然後再建立 SqlCeCommandBuilder。資料配接器 (Adapter) 接著會使用該命令產生器 (Builder),以更新區域資料庫中修改的 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 中為 Shared) 成員都是執行緒安全的。並不是所有的執行個體成員都保證可以用於所有的執行緒。