Ich versuche sicherzustellen, dass sowohl meine einfügen und darunter löschen funktioniert vollständig oder gar nicht. Ich habe mein Verbindungsobjekt außerhalb meines Transaktionsbereichs, was meiner Meinung nach nicht hundertprozentig sicher ist.TransactionScope scheint nicht zu funktionieren
Ich weiß, dass dieser Code nicht so funktioniert, wie ich es vorhabe. Nach dem ersten Teil (der Einfügevorgang) und dem Abbruch durch Abbruch an einem Unterbrechungspunkt werden die Zeilen tatsächlich eingefügt, obwohl ich scope.complete nie aufgerufen habe.
Bitte zeigen Sie den Fehler in meinem Denken und Logik hier.
sqlConnection.Open();
int numFound = 1;
int max = 99;
int iteration = 0;
while (iteration < max && numFound > 0)
{
iteration++;
var ids = new List<int>();
using (var sqlCommand0 = new SqlCommand(sql0, sqlConnection))
{
using (SqlDataReader reader1 = sqlCommand0.ExecuteReader())
{
while (reader1.Read())
{
ids.Add(reader1.GetInt32(0));
}
}
}
numFound = ids.Count;
if (numFound > 0)
{
using (var scope = new TransactionScope())
{
string whereClause = $"WHERE Id IN ({string.Join(",", ids)})";
string sql1 = string.Format(sqlTemplate1, whereClause);
using (var sqlCommand1 = new SqlCommand(sql1, sqlConnection))
{
sqlCommand1.ExecuteNonQuery();
}
// BREAK POINT HERE - ABORTED PROGRAM AND sql1 had been committed.
var sql2 = "DELETE FROM SendGridEventRaw " + whereClause;
using (var sqlCommand2 = new SqlCommand(sql2, sqlConnection))
{
sqlCommand2.ExecuteNonQuery();
}
scope.Complete();
total += numFound;
Console.WriteLine("deleted: " + whereClause);
}
}
}
}