Share via


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 プロパティを設定した場合は、単一テーブルを更新する Transact-SQL ステートメントを自動的に生成する SqlCeCommandBuilder オブジェクトを作成できます。

DataAdapter プロパティを設定すると、SqlCeCommandBuilder が RowUpdating イベントのリスナとして自動的に登録されます。相互に関連付けることのできる SqlCeDataAdapter オブジェクトと SqlCeCommandBuilder オブジェクトは、それぞれ一度に 1 つだけです。

SqlCeCommandBuilder では、INSERT、UPDATE、または DELETE ステートメントを生成するために、SelectCommand プロパティを通じて必要なメタデータ セットが自動的に取得されます。最初の更新の後など、メタデータが取得された後で SelectCommand を変更した場合は、RefreshSchema()()()() メソッドを呼び出してメタデータを更新する必要があります。

また、SelectCommand は、少なくとも 1 つの主キー列または一意な列を返すようにする必要があります。これらの列が存在しない場合は、InvalidOperation 例外が生成され、コマンドは生成されません。

また、SqlCeCommandBuilder では、SelectCommand が参照する Connection プロパティと Transaction プロパティも使用されます。これらのいずれかのプロパティを変更した場合、または SelectCommand 自体を置き換えた場合は、RefreshSchema()()()() を呼び出す必要があります。この操作を行わないと、InsertCommandUpdateCommand、および DeleteCommand の各プロパティは、変更前の値のままになります。

Dispose()()()() を呼び出すと、SqlCeCommandBuilder と SqlCeDataAdapter の関連付けが解除され、生成されたコマンドは使用されなくなります。

使用例

SqlCeCommandSqlCeDataAdapter および 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());
}

継承階層

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