SQLite 在使用参数和事务时不插入多行
SQLite not inserting more than one row when using parameters and transaction
我在 Windows UWP 应用程序中使用 SQlite 时遇到一个奇怪的现象。
我正在尝试对事务进行批量插入,但我只在数据库中插入了一行,或者出现一条错误消息“必须为以下参数添加值:”但错误中未显示任何参数消息和我的所有参数都包含有效值。
这是代码
{
string dbpath = Path.Combine(ApplicationData.Current.LocalFolder.Path, _dbName);
using (SqliteConnection db = new SqliteConnection($"Filename={dbpath}"))
{
db.Open();
using (var insertCommand = db.CreateCommand())
{
using (var insertTransaction = db.BeginTransaction())
{
insertCommand.Transaction = insertTransaction
insertCommand.CommandText = $"INSERT INTO {tableName} (Id) VALUES (@Id)";
foreach (var aktor in aktors)
{
insertCommand.Parameters.AddWithValue("@id", aktor.Id);
await insertCommand.ExecuteNonQueryAsync();
}
insertTransaction.Commit();
}
}
db.Close();
}
return true;
}
您的代码中有一个错误,每次您都向现有参数添加一个新参数。试试这个
insertCommand.Parameters.AddWithValue("@id", 0);
foreach (var aktor in aktors)
{
insertCommand.Parameters[0].Value = aktor.Id;
// or
insertCommand.Parameters["@id"].Value = actor.Id;
await insertCommand.ExecuteNonQueryAsync();
}
在循环中对每个项目执行一个 INSERT 命令,然后提交:
{
string dbpath = Path.Combine(ApplicationData.Current.LocalFolder.Path, _dbName);
using (SqliteConnection db = new SqliteConnection($"Filename={dbpath}"))
{
db.Open();
using (var insertTransaction = db.BeginTransaction())
{
foreach (var aktor in aktors)
{
using (var insertCommand = db.CreateCommand())
{
insertCommand.Transaction = insertTransaction;
insertCommand.CommandText = $"INSERT INTO {tableName} (Id) VALUES (@Id)";
insertCommand.Parameters.AddWithValue("@id", aktor.Id);
await insertCommand.ExecuteNonQueryAsync();
}
}
insertTransaction.Commit();
}
db.Close();
}
return true;
}
我在 Windows UWP 应用程序中使用 SQlite 时遇到一个奇怪的现象。
我正在尝试对事务进行批量插入,但我只在数据库中插入了一行,或者出现一条错误消息“必须为以下参数添加值:”但错误中未显示任何参数消息和我的所有参数都包含有效值。
这是代码
{
string dbpath = Path.Combine(ApplicationData.Current.LocalFolder.Path, _dbName);
using (SqliteConnection db = new SqliteConnection($"Filename={dbpath}"))
{
db.Open();
using (var insertCommand = db.CreateCommand())
{
using (var insertTransaction = db.BeginTransaction())
{
insertCommand.Transaction = insertTransaction
insertCommand.CommandText = $"INSERT INTO {tableName} (Id) VALUES (@Id)";
foreach (var aktor in aktors)
{
insertCommand.Parameters.AddWithValue("@id", aktor.Id);
await insertCommand.ExecuteNonQueryAsync();
}
insertTransaction.Commit();
}
}
db.Close();
}
return true;
}
您的代码中有一个错误,每次您都向现有参数添加一个新参数。试试这个
insertCommand.Parameters.AddWithValue("@id", 0);
foreach (var aktor in aktors)
{
insertCommand.Parameters[0].Value = aktor.Id;
// or
insertCommand.Parameters["@id"].Value = actor.Id;
await insertCommand.ExecuteNonQueryAsync();
}
在循环中对每个项目执行一个 INSERT 命令,然后提交:
{
string dbpath = Path.Combine(ApplicationData.Current.LocalFolder.Path, _dbName);
using (SqliteConnection db = new SqliteConnection($"Filename={dbpath}"))
{
db.Open();
using (var insertTransaction = db.BeginTransaction())
{
foreach (var aktor in aktors)
{
using (var insertCommand = db.CreateCommand())
{
insertCommand.Transaction = insertTransaction;
insertCommand.CommandText = $"INSERT INTO {tableName} (Id) VALUES (@Id)";
insertCommand.Parameters.AddWithValue("@id", aktor.Id);
await insertCommand.ExecuteNonQueryAsync();
}
}
insertTransaction.Commit();
}
db.Close();
}
return true;
}