Se ho una funzione che modifica il database nel mio webservice, desidero eseguire un solo thread alla volta se provano a modificare la stessa riga.Blocca solo se il valore è lo stesso?
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();
}
so di poter bloccare l'intera funzione, ma poi ho sciolto preformance perché la sua quasi mai che diversi thread cercheranno di modificare lo stesso controllo.
c'è un modo per bloccare solo altri thread che hanno lo stesso check-in?
UPDATE
i utilizzare OleDbConnection
e MySqlConnection
OleDbCommand oleDbCommand = AccessTrans != null ?
new OleDbCommand(sql, AccessConn, AccessTrans) : new OleDbCommand(sql, AccessConn);
oleDbCommand.ExecuteNonQuery();
la stessa funzione per MySqlCommand
e quindi i ius utilizzare i normali comandi INSERT e UPDATE SQL. e la transazione viene controllata se è presente o meno. quindi questa funzione funziona se vuoi una transazione o meno nella tua funzione di livello superiore.
per la lettura dal database ve lo riempirò 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;
Non dovrebbe essere gestito sul database? Hai effettivamente un problema o si basa solo su ipotesi? –
Come viene scritto l'accesso ai dati? Se stai usando EF questo può aiutare: http: //blogs.msdn.com/b/alexj/archive/2009/05/20/tip-19-how-to-use-optimistic-concurrency-in-the- entity-framework.aspx – Lev
Puoi mostrare come stai accedendo al database, ci sono buoni strumenti incorporati in molti metodi di accesso ai dati per gestire questo problema (qualsiasi soluzione sul lato client funzionerebbe solo se solo un client si collegasse al database Se due copie del tuo programma chiamano entrambi "EditCheck" per lo stesso 'checkid', le risposte attuali non funzionerebbero) –