共用方式為


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 失去關聯,並且不再使用所產生的命令。

範例

下列範例會使用 SqlCeCommandSqlCeDataAdapterSqlCeConnection,從資料來源選取資料列。此範例會傳遞連接字串 (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());
}

繼承階層

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 命名空間