2

単一の MySQL (InnoDB) データベースにアクセスする複数の自動化されたサービス間でデータの一貫性を維持しようとしています。現在、GET_LOCK を使用してこれを達成しようとしています。自動生成された型指定されたデータセットを使用しており、次のクエリを構成しています。

SELECT GET_LOCK('@id', 1)

アダプターはパラメーターとして も受け入れInt32ます。問題は、'@id'フィールドが文字列リテラルとして解釈されるため、動的に割り当てられたロック文字列を取得できないことです。私の質問は、これが可能かどうかです。

私の現在の回避策は、次のようなものです。

DataSetTableAdapters.myTableAdapter typedAdapter = new DataSetTableAdapters.myTableAdapter();

MySql.Data.MySqlClient.MySqlCommand selectCommand_backup = typedAdapter.Adapter.SelectCommand;

typedAdapter.Adapter.SelectCommand = new MySql.Data.MySqlClient.MySqlCommand();
typedAdapter.Adapter.SelectCommand.Connection = typedAdapter.Connection;
typedAdapter.Adapter.SelectCommand.CommandText = string.Format("SELECT GET_LOCK('{0}_{1}', 1)", tableName, id);
typedAdapter.Adapter.SelectCommand.CommandType = System.Data.CommandType.Text;

typedAdapter.Connection.Open();
typedAdapter.Adapter.SelectCommand.ExecuteScalar();
typedAdapter.Connection.Close();

typedAdapter.Adapter.SelectCommand = selectCommand_backup;

私は他のアイデアにもオープンです。自動化されたシステムで処理するのは難しいため、可能であれば競合の解決を回避したいと考えています。

4

0 に答える 0