È possibile creare in modo esplicito una transazione e passare che in giro, vale a dire
using(var connection = ...)
{
connection.Open();
using (var tran = connection.BeginTransaction())
{
try
{
FBSave(connection, tran);
FBSaveDetails(connection, tran);
tran.Commit();
}
catch
{
tran.Rollback();
throw;
}
}
}
Si noti che qui si must anche impostare la Transaction
su ogni comando, quindi il motivo per cui è necessario passare in, e tutto il i comandi devono essere sullo stesso oggetto di connessione.
Oppure: è possibile utilizzare TransactionScope
; è importante che il Open()
accade all'interno il TransactionScope
per ottenere l'arruolamento automatica:
using(var tran = new TransactionScope())
{
FBSave();
FBSaveDetails();
tran.Complete();
}
o:
using(var tran = new TransactionScope())
using(var connection = ...)
{
connection.Open();
FBSave(connection);
FBSaveDetails(connection);
tran.Complete();
}
con l'approccio TransactionScope
, non c'è bisogno di impostare nulla di speciale - la maggior parte delle è automatico. Ovviamente è possibile passare facoltativamente la connessione nei metodi, ma potrebbero anche ottenere la propria connessione e, nella maggior parte dei casi, funzionerebbe correttamente.
fonte
2012-12-19 07:18:46
MS Access o SQL Server? – andy
come si fa il livello dati? procedura di archiviazione? LINQ to SQL? collegato? scollegato? –
Puoi fare ciò che vuoi usando le transazioni, http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqltransaction(v=vs.100).aspx – Raghuveer