繁体   English   中英

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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM