次の方法で共有


OdbcCommandBuilder クラス

メモ : この名前空間、クラス、およびメンバは、.NET Framework Version 1.1 だけでサポートされています。

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

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

System.Object
   System.MarshalByRefObject
      System.ComponentModel.Component
         System.Data.Odbc.OdbcCommandBuilder

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

スレッドセーフ

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

解説

OdbcDataAdapter では、データ ソースに関連付けられた DataSet への変更を調整するために必要な SQL ステートメントが、自動的に生成されることはありません。ただし、 OdbcDataAdapterSelectCommand プロパティを設定して、単一テーブルを更新する SQL ステートメントを自動的に生成する OdbcCommandBuilder オブジェクトを作成できます。続いて、 OdbcCommandBuilder により、未設定の SQL ステートメントが追加で自動生成されます。

OdbcDataAdapter とそれに対応する OdbcCommandBuilder 間のリレーションシップは、常に 1 対 1 です。この対応を作成するには、 OdbcCommandBuilder オブジェクトの OdbcDataAdapter プロパティを設定します。その結果、 OdbcCommandBuilder はリスナとして登録され、 DataSet を対象とする RowUpdating イベントの出力を生成します。

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

メモ    SelectCommand プロパティに割り当てられた SELECT ステートメントで別名の列名が使用されている場合は、それを使用した INSERT、UPDATE、および DELETE ステートメントは正しくないか、失敗する可能性があります。基になる ODBC ドライバが別名の列名に対応する正しい元の列名を (SQLColAttribute の SQL_DESC_BASE_COLUMN_NAME 値を使用して) 提供できない場合、生成された INSERT、UPDATE、および DELETE ステートメントに別名が使用される可能性があります。たとえば、Microsoft ODBC Driver for Oracle は、元の列名として別名を返します。そのため、生成された INSERT、UPDATE、および DELETE ステートメントでエラーが発生します。

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

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

使用例

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

 
Public Shared Function SelectOdbcSrvRows(myConnection As String, mySelectQuery As String, myTableName As String) As DataSet
    Dim myConn As New OdbcConnection(myConnection)
    Dim myDataAdapter As New OdbcDataAdapter()
    myDataAdapter.SelectCommand = New OdbcCommand(mySelectQuery, myConn)
    Dim cb As OdbcCommandBuilder = New OdbcCommandBuilder(myDataAdapter)

    myConn.Open()

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

    ' Code to modify data in DataSet here 

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

    myConn.Close()
End Function 'SelectOdbcSrvRows

[C#] 
public static DataSet SelectOdbcSrvRows(string myConnection, string mySelectQuery, string myTableName)
{
   OdbcConnection myConn = new OdbcConnection(myConnection);
   OdbcDataAdapter myDataAdapter = new OdbcDataAdapter();
   myDataAdapter.SelectCommand = new OdbcCommand(mySelectQuery, myConn);
   OdbcCommandBuilder cb = new OdbcCommandBuilder(myDataAdapter);

   myConn.Open();

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

   //code to modify data in DataSet here

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

   myConn.Close();

   return ds;
}

[C++] 
public:
    static DataSet* SelectOdbcSrvRows(String* myConnection, String* mySelectQuery, String* myTableName)
    {
        OdbcConnection* myConn = new OdbcConnection(myConnection);
        OdbcDataAdapter* myDataAdapter = new OdbcDataAdapter();
        myDataAdapter->SelectCommand = new OdbcCommand(mySelectQuery, myConn);
        OdbcCommandBuilder* cb = new OdbcCommandBuilder(myDataAdapter);

        myConn->Open();

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

        //code to modify data in DataSet here

        //Without the OdbcCommandBuilder this line would fail
        myDataAdapter->Update(ds, myTableName);

        myConn->Close();

        return ds;
    };

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

必要条件

名前空間: System.Data.Odbc

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

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

参照

OdbcCommandBuilder メンバ | System.Data.Odbc 名前空間