Является ли этот код твердым? Я пытался использовать «использование» и т. Д. В основном метод для передачи в виде последовательного списка команд SQL для запуска в базе данных Sqlite.
Я предполагаю, что это правда, что в sqlite по умолчанию все команды, выполняемые в одном соединении, обрабатываются транзакционно? Это правда? Т.е. мне не нужно (и в данный момент у меня нет кода) ни BeginTransaction, ни CommitTransaction.
Он использует http://sqlite.phxsoftware.com/ в качестве поставщика базы данных sqlite ADO.net.
1-й ПОПЫТКА
private int ExecuteNonQueryTransactionally(List<string> sqlList)
{
int totalRowsUpdated = 0;
using (var conn = new SQLiteConnection(_connectionString))
{
// Open connection (one connection so should be transactional - confirm)
conn.Open();
// Apply each SQL statement passed in to sqlList
foreach (string s in sqlList)
{
using (var cmd = new SQLiteCommand(conn))
{
cmd.CommandText = s;
totalRowsUpdated = totalRowsUpdated + cmd.ExecuteNonQuery();
}
}
}
return totalRowsUpdated;
}
3-й TRY
Как это?
private int ExecuteNonQueryTransactionally(List<string> sqlList)
{
int totalRowsUpdated = 0;
using (var conn = new SQLiteConnection(_connectionString))
{
conn.Open();
using (var trans = conn.BeginTransaction())
{
try
{
// Apply each SQL statement passed in to sqlList
foreach (string s in sqlList)
{
using (var cmd = new SQLiteCommand(conn))
{
cmd.CommandText = s;
totalRowsUpdated = totalRowsUpdated + cmd.ExecuteNonQuery();
}
}
trans.Commit();
}
catch (SQLiteException ex)
{
trans.Rollback();
throw;
}
}
}
return totalRowsUpdated;
}
спасибо