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()()()() を呼び出す必要があります。この操作を行わないと、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());
}
継承階層
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.