Web サービスでデータベースを編集する関数がある場合、同じ行を編集しようとすると、一度に 1 つのスレッドのみを実行する必要があります。
void EditCheck(long checkid)
{
if (isCheckCosed)
throw new Exception("check is already closed");
//do stuff
//after i edit my check i want to close it.
CloseCheck();
}
関数全体をロックできることはわかっていますが、異なるスレッドが同じチェックを編集しようとすることはほとんどないため、パフォーマンスが低下します。
同じチェックIDを持つ他のスレッドのみをロックアウトする方法はありますか?
アップデート
私は使用OleDbConnection
し、MySqlConnection
OleDbCommand oleDbCommand = AccessTrans != null ?
new OleDbCommand(sql, AccessConn, AccessTrans) : new OleDbCommand(sql, AccessConn);
oleDbCommand.ExecuteNonQuery();
のための同じ機能MySqlCommand
そして、通常のINSERTおよびUPDATE sqlコマンドを使用します。およびトランザクションが存在するかどうかがチェックされます。したがって、この関数は、トランザクションが必要な場合、または上位レベルの関数ではない場合に機能します。
データベースから読み取るために、私が記入しますDataTable
OleDbCommand oleDbCommand = AccessTrans != null ? new OleDbCommand(sql, AccessConn, AccessTrans) : new OleDbCommand(sql, AccessConn);
OleDbDataAdapter dAdapter = new OleDbDataAdapter();
dAdapter.SelectCommand = oleDbCommand;
dAdapter.Fill(dTable);
return dTable;