[+/-]
MySQL データベースに関連付けられた DataSet の変更を調整するための単一テーブル コマンドを自動的に生成します。このクラスを継承することはできません。
MySqlDataAdapter は、MySQL
のインスタンスに関連付けられた
System.Data.DataSetDataSet
への変更を調整するのに必要な SQL
文を自動的に生成することはありません。しかし、MySqlDataAdapter
の
MySqlDataAdapter.SelectCommandSelectCommand
を設定すれば、単一テーブルのアップデートのための
SQL 文を自動的に生成する
MySqlCommandBuilder
オブジェクトを作成することができます。そうすると、設定していない追加の
SQL 文は、MySqlCommandBuilder
によって生成されます。
MySqlCommandBuilder
は、DataAdapter
プロパティを設定すると、自らを
MySqlDataAdapter.OnRowUpdating RowUpdating
イベントのリスナとして登録します。一度にはひとつの
MySqlDataAdapter または
MySqlCommandBuilder
オブジェクトだけをお互いに関連付けることが可能です。
INSERT 、UPDATE 、もしくは DELETE
文を生成するため、MySqlCommandBuilder
は SelectCommand
プロパティを使用して必要なメタデータのセットを自動的に引き出します。メタデータが引き出された後に
( 例えば最初のアップデートの後 )
SelectCommand
を変更する場合、RefreshSchema
メソッドを呼び出してメタデータをアップデートしてください。
また、SelectCommand はプライマリ
キーか一意列を少なくともひとつは戻さなければなりません。もしひとつもない場合は、InvalidOperation
例外が生成され、コマンドは生成されません。
MySqlCommandBuilder
は、SelectCommand が参照する
MySqlCommand.ConnectionConnection
、MySqlCommand.CommandTimeoutCommandTimeout
、そして
MySqlCommand.TransactionTransaction
プロパティも使用します。これらのプロパティのどれかが改変されている場合、または
SelectCommand
そのものが取り替えられている場合、ユーザは
RefreshSchema
を呼び出してください。それを行わない場合、MySqlDataAdapter.InsertCommandInsertCommand
、MySqlDataAdapter.UpdateCommandUpdateCommand
、そして
MySqlDataAdapter.DeleteCommandDeleteCommand
プロパティはそれぞれ前値を保持します。
Dispose
を呼び出すと、MySqlCommandBuilder は
MySqlDataAdapter
との関連を絶たれ、生成されたコマンドは使用されなくなります。
MySqlCommandBuilder を MySql 4.0
システムで使用する際は十分な注意が必要です。MySQL
4.0
での使用では、データベースとスキーマの情報はクエリ用にコネクタに提供されません。つまり、ふたつ以上の異なるデータベースにあるふたつの同じ名前のテーブルからカラムを引き出すクエリが、例外の投入の原因になることなく正常に作動するということになります。より危険なのは、データベース
X を参照しつつもデータベース Y
で実行されるステートメントを選択し、そしてその両方のデータベースが似通ったレイアウトのテーブルを持つという状況です。このような状況は不要な変更や削除を引き起こす場合があります。この注意は
MySQL バージョン 4.1
以降には当てはまりません。
例
次の例は MySqlDataAdapter および
MySqlConnection に沿って
MySqlCommand
を使用し、データソースから行を選択します。この例は、初期化された
System.Data.DataSet
、接続ストリング、SQL SELECT
文であるクエリ
ストリング、そしてデータベース
テーブル名であるストリングに渡されます。そしてこの例は
MySqlCommandBuilder を作成します。
Visual Basic 例 :
Public Shared Function SelectRows(myConnection As String, mySelectQuery As String, myTableName As String) As DataSet
Dim myConn As New MySqlConnection(myConnection)
Dim myDataAdapter As New MySqlDataAdapter()
myDataAdapter.SelectCommand = New MySqlCommand(mySelectQuery, myConn)
Dim cb As SqlCommandBuilder = New MySqlCommandBuilder(myDataAdapter)
myConn.Open()
Dim ds As DataSet = New DataSet
myDataAdapter.Fill(ds, myTableName)
' Code to modify data in DataSet here
' Without the MySqlCommandBuilder this line would fail.
myDataAdapter.Update(ds, myTableName)
myConn.Close()
End Function 'SelectRows
C# 例 :
public static DataSet SelectRows(string myConnection, string mySelectQuery, string myTableName)
{
MySqlConnection myConn = new MySqlConnection(myConnection);
MySqlDataAdapter myDataAdapter = new MySqlDataAdapter();
myDataAdapter.SelectCommand = new MySqlCommand(mySelectQuery, myConn);
MySqlCommandBuilder cb = new MySqlCommandBuilder(myDataAdapter);
myConn.Open();
DataSet ds = new DataSet();
myDataAdapter.Fill(ds, myTableName);
//code to modify data in DataSet here
//Without the MySqlCommandBuilder this line would fail
myDataAdapter.Update(ds, myTableName);
myConn.Close();
return ds;
}
MySqlCommandBuilder
クラスの新規インスタンスを初期化し、last one
wins プロパティを設定します。
パラメータ :変更保護コードの生成には False 。それ以外は True 。
lastOneWins
パラメータは、基礎となるデータの変更を確認する生成された
DELETE および UPDATE コマンドに、SQL
コードが含まれるべきかを指示します。lastOneWins
が true
である場合はこのコードは含まれず、データ
レコードはマルチユーザまたはマルチスレッドの環境で上書きされる場合があります。lastOneWins
を false
に設定するとこの確認が含まれ、知らない間に基礎になるデータ
レコードが変更される場合に同時実行例外が投入される原因になります。
関連する MySqlDataAdapter
オブジェクトで MySqlCommandBuilder
クラスの新規インスタンスを初期化します。
パラメータ :使用する
MySqlDataAdapter 。
MySqlCommandBuilder
は自らを、このプロパティで指定されたMySqlDataAdapter
によって生成された
MySqlDataAdapter.RowUpdating
イベントのリスナとして登録します。
新規インスタンス
MySqlCommandBuilder
を作成する際、この
MySqlDataAdapter に関連する既存の
MySqlCommandBuilder
がリリースされます。
関連する MySqlDataAdapter
オブジェクトで MySqlCommandBuilder
クラスの新規インスタンスを初期化します。
パラメータ :使用する
MySqlDataAdapter 。
パラメータ :変更保護コードの生成には False 。それ以外は True 。
MySqlCommandBuilder
は自らを、このプロパティで指定されたMySqlDataAdapter
によって生成された
MySqlDataAdapter.RowUpdating
イベントのリスナとして登録します。
新規インスタンス
MySqlCommandBuilder
を作成する際、この
MySqlDataAdapter に関連する既存の
MySqlCommandBuilder
がリリースされます。
lastOneWins
パラメータは、基礎となるデータの変更を確認する生成された
DELETE および UPDATE コマンドに、SQL
コードが含まれるべきかを指示します。lastOneWins
が true
である場合はこのコードは含まれず、データ
レコードはマルチユーザまたはマルチスレッドの環境で上書きされる場合があります。lastOneWins
を false
に設定するとこの確認が含まれ、知らない間に基礎になるデータ
レコードが変更される場合に同時実行例外が投入される原因になります。
SQL 文が自動的に生成される
MySqlDataAdapter
オブジェクトを取得または設定します。
値
:MySqlDataAdapterオブジェクト。
MySqlCommandBuilder
は自らを、このプロパティで指定されたMySqlDataAdapter
によって生成された
MySqlDataAdapter.RowUpdating
イベントのリスナとして登録します。
新規インスタンス
MySqlCommandBuilder
を作成する際、この
MySqlDataAdapter に関連する既存の
MySqlCommandBuilder
がリリースされます。
スペースや予約トークンなどの文字を名前に含む MySQL データベース オブジェクト ( 例えばテーブルやカラム ) の指定に使用する文字や、開始文字を取得または設定します。
値 :使用する開始文字または文字。デフォルト値は ` 。
MySQL のデータベース オブジェクトは、普通の
SQL
ストリングなら正確な解析が不可能になるスペースなどの特殊な文字を含むことができます。QuotePrefix
および QuoteSuffix
プロパティを使用すると、この状況に対処する
SQL コマンドを MySqlCommandBuilder
が構築できるようになります。
スペースや予約トークンなどの文字を名前に含む MySQL データベース オブジェクト ( 例えばテーブルやカラム ) の指定に使用する文字や、開始文字を取得または設定します。
値 :使用する開始文字または文字。デフォルト値は ` 。
MySQL のデータベース オブジェクトは、普通の
SQL
ストリングなら正確な解析が不可能になるスペースなどの特殊な文字を含むことができます。QuotePrefix
および QuoteSuffix
プロパティを使用すると、この状況に対処する
SQL コマンドを MySqlCommandBuilder
が構築できるようになります。
データベースでの削除に必要な、自動的に生成された
MySqlCommand
オブジェクトを取得します。
戻り値 :
削除操作の処理のために生成された
MySqlCommand オブジェクト。
GetDeleteCommand
メソッドは実行される MySqlCommand
を戻すので、アプリケーションはそれを情報提供やトラブルシュートの目的に使用することができます。
また、GetDeleteCommand
を変更されたコマンドの基盤として使用することもできます。例えば、GetDeleteCommand
を呼び出して
MySqlCommand.CommandTimeout
値を変更したとすると、それを
MySqlDataAdapter
に明示的に設定します。
最初に SQL
文が生成された後、ステートメントになんらかの変更が生じる場合はアプリケーションが
RefreshSchema
を明示的に呼び出す必要があります。さもなければ
GetDeleteCommand
は前のステートメントからの情報を使い続けることになり、それでは間違っている可能性があります。SQL
文が最初に生成されるのは、アプリケーションが
System.Data.Common.DataAdapter.Update
または GetDeleteCommand
を呼び出す時です。
データベースでの挿入に必要な、自動的に生成された
MySqlCommand
オブジェクトを取得します。
戻り値 :
The挿入操作の処理のために生成された
MySqlCommand オブジェクト。
GetInsertCommand
メソッドは実行される MySqlCommand
を戻すので、アプリケーションはそれを情報提供やトラブルシュートの目的に使用することができます。
また、GetInsertCommand
を変更されたコマンドの基礎として使用することもできます。例えば、GetInsertCommand
を呼び出して
MySqlCommand.CommandTimeout
値を変更したとすると、それを
MySqlDataAdapter
に明示的に設定します。
最初に SQL
文が生成された後、ステートメントになんらかの変更が生じる場合はアプリケーションが
RefreshSchema
を明示的に呼び出す必要があります。さもなければ
GetInsertCommand
は前のステートメントからの情報を使い続けることになり、それでは間違っている可能性があります。SQL
文が最初に生成されるのは、アプリケーションが
System.Data.Common.DataAdapter.Update
または GetInsertCommand
を呼び出す時です。
データベースでの更新作業に必要な、自動的に生成された
MySqlCommand
オブジェクトを取得します。
戻り値 :
更新操作の処理のために生成された
MySqlCommand オブジェクト。
GetUpdateCommand
メソッドは実行される MySqlCommand
を戻すので、アプリケーションはそれを情報提供やトラブルシュートの目的に使用することができます。
また、GetUpdateCommand
を変更されたコマンドの基盤として使用することもできます。例えば、GetUpdateCommand
を呼び出して
MySqlCommand.CommandTimeout
値を変更したとすると、それを
MySqlDataAdapter
に明示的に設定します。
最初に SQL
文が生成された後、ステートメントになんらかの変更が生じる場合はアプリケーションが
RefreshSchema
を明示的に呼び出す必要があります。さもなければ
GetUpdateCommand
は前のステートメントからの情報を使い続けることになり、それでは間違っている可能性があります。SQL
文が最初に生成されるのは、アプリケーションが
System.Data.Common.DataAdapter.Update
または GetUpdateCommand
を呼び出す時です。
