次の方法で共有


SqlCommandBuilder クラス

SQL Server データベースに関連付けられた DataSet への変更を調整するための単一テーブル コマンドを自動的に生成します。このクラスは継承できません。

この型のすべてのメンバの一覧については、SqlCommandBuilder メンバ を参照してください。

System.Object
   System.MarshalByRefObject
      System.ComponentModel.Component
         System.Data.SqlClient.SqlCommandBuilder

NotInheritable Public Class SqlCommandBuilder
   Inherits Component
[C#]
public sealed class SqlCommandBuilder : Component
[C++]
public __gc __sealed class SqlCommandBuilder : public Component
[JScript]
public class SqlCommandBuilder extends Component

スレッドセーフ

この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。

解説

SqlDataAdapter では、SQL Server のインスタンスに関連付けられた DataSet への変更を調整する Transact-SQL ステートメントが自動的には生成されません。ただし、 SqlDataAdapterSelectCommand プロパティを設定した場合は、単一テーブルを更新する Transact-SQL ステートメントを自動的に生成する SqlCommandBuilder オブジェクトを作成できます。これによって、追加の Transact-SQL ステートメントが、 SqlCommandBuilder によって自動的に生成されます。

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

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

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

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

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

使用例

[Visual Basic, C#, C++] SqlCommandSqlDataAdapter および SqlConnection と共に使用して、データ ソースから行を選択する例を次に示します。この例では、初期化済みの DataSet 、接続文字列、Transact-SQL SELECT ステートメントのクエリ文字列、およびデータベース テーブル名の文字列が渡されます。これらを基に、 SqlCommandBuilder を作成します。

 
Public Shared Function SelectSqlSrvRows(myConnection As String, mySelectQuery As String, myTableName As String) As DataSet
    Dim myConn As New SqlConnection(myConnection)
    Dim myDataAdapter As New SqlDataAdapter()
    myDataAdapter.SelectCommand = New SqlCommand(mySelectQuery, myConn)
    Dim cb As SqlCommandBuilder = New SqlCommandBuilder(myDataAdapter)

    myConn.Open()

    Dim ds As DataSet = New DataSet
    myDataAdapter.Fill(ds, myTableName)

    ' Code to modify data in DataSet here 

    ' Without the SqlCommandBuilder this line would fail.
    myDataAdapter.Update(ds, myTableName)

    myConn.Close()
End Function 'SelectSqlSrvRows

[C#] 
public static DataSet SelectSqlSrvRows(string myConnection, string mySelectQuery, string myTableName)
{
   SqlConnection myConn = new SqlConnection(myConnection);
   SqlDataAdapter myDataAdapter = new SqlDataAdapter();
   myDataAdapter.SelectCommand = new SqlCommand(mySelectQuery, myConn);
   SqlCommandBuilder cb = new SqlCommandBuilder(myDataAdapter);

   myConn.Open();

   DataSet ds = new DataSet();
   myDataAdapter.Fill(ds, myTableName);

   //code to modify data in DataSet here

   //Without the SqlCommandBuilder this line would fail
   myDataAdapter.Update(ds, myTableName);

   myConn.Close();

   return ds;
}

[C++] 
public:
    static DataSet* SelectSqlSrvRows(String* myConnection, String* mySelectQuery, String* myTableName)
    {
        SqlConnection* myConn = new SqlConnection(myConnection);
        SqlDataAdapter* myDataAdapter = new SqlDataAdapter();
        myDataAdapter->SelectCommand = new SqlCommand(mySelectQuery, myConn);
        SqlCommandBuilder* cb = new SqlCommandBuilder(myDataAdapter);

        myConn->Open();

        DataSet* ds = new DataSet();
        myDataAdapter->Fill(ds, myTableName);

        //code to modify data in DataSet here

        //With->Item[Out] the* SqlCommandBuilder this line would fail
        myDataAdapter->Update(ds, myTableName);

        myConn->Close();

        return ds;
    };

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

名前空間: System.Data.SqlClient

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET

アセンブリ: System.Data (System.Data.dll 内)

参照

SqlCommandBuilder メンバ | System.Data.SqlClient 名前空間