У меня есть цикл, который проходит через каждый элемент списка и добавляет его в базу данных. Код ниже - это метод, который я вызываю, когда кнопка нажата на форму WPF. Он получает значение ID и список шагов (DTO) из app.xaml.cs и помещает данные из списка в базу данных.Почему этот код работает только дважды?
using (SQLiteConnection sqConnection = getDatabaseConnection())
{
SQLiteCommand addItemCommand = sqConnection.CreateCommand();
sqConnection.Open();
SQLiteTransaction stepTrans;
// Start a local transaction
stepTrans = sqConnection.BeginTransaction(System.Data.IsolationLevel.ReadCommitted);
// Assign transaction object for a pending local transaction
addItemCommand.Transaction = stepTrans;
addItemCommand.Connection = sqConnection;
foreach (Step step in StepsGlobal)
{
string sqAddItem = String.Format
("INSERT INTO Steps(ID, RecipeID, Description, StepTime, Dependency, Priority, Type) Values(null, '{0}', '{1}', '{2}', '{3}', '{4}', '{5}')",
recipeID, step.Description, step.StepTime, step.Dependency, step.Priority, step.Type);
addItemCommand.CommandText = sqAddItem;
addItemCommand.ExecuteNonQuery();
stepTrans.Commit();
}
Однако он работает только для первых двух элементов, и я получаю следующую ошибку, если список содержит более двух элементов.
A first chance exception of type 'System.ArgumentNullException' occurred in
System.Data.SQLite.dll
System.ArgumentNullException: Value cannot be null.
Parameter name: No connection associated with this transaction
at System.Data.SQLite.SQLiteTransaction.IsValid(Boolean throwError)
at System.Data.SQLite.SQLiteTransaction.Commit()
at Project.Methods.addStepsToDatabase()
Вы вызываете BeginTransaction один раз, вне вашей петли. Затем Commit в конце вашего цикла на каждой итерации. – svenv