Ich habe eine Leseabfrage, die ich innerhalb einer Transaktion ausführe, damit ich die Isolationsstufe angeben kann. Was soll ich tun, wenn die Abfrage abgeschlossen ist?
- Übernehmen Sie die Transaktion
- Setzen Sie die Transaktion zurück
- Tun Sie nichts (was dazu führt, dass die Transaktion am Ende des using-Blocks zurückgesetzt wird)
Was bedeutet es, dies zu tun?
using (IDbConnection connection = ConnectionFactory.CreateConnection())
{
using (IDbTransaction transaction = connection.BeginTransaction(IsolationLevel.ReadUncommitted))
{
using (IDbCommand command = connection.CreateCommand())
{
command.Transaction = transaction;
command.CommandText = "SELECT * FROM SomeTable";
using (IDataReader reader = command.ExecuteReader())
{
// Read the results
}
}
// To commit, or not to commit?
}
}
BEARBEITEN: Die Frage ist nicht, ob eine Transaktion verwendet werden soll oder ob es andere Möglichkeiten gibt, die Transaktionsebene festzulegen. Die Frage ist, ob es einen Unterschied macht, ob eine Transaktion, die nichts ändert, festgeschrieben oder zurückgesetzt wird. Gibt es einen Leistungsunterschied? Betrifft es andere Verbindungen? Irgendwelche anderen Unterschiede?