Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用事务对SQLite进行批更新_C#_System.data.sqlite_Microsoft.data.sqlite - Fatal编程技术网

C# 使用事务对SQLite进行批更新

C# 使用事务对SQLite进行批更新,c#,system.data.sqlite,microsoft.data.sqlite,C#,System.data.sqlite,Microsoft.data.sqlite,使用Microsoft.Data.Sqlite在循环中将产品添加到Sqlite数据库时出错。错误: Must add values for the following parameters: @ItemCode, @ItemCost, @ItemDescription, @LocationId, @ReorderStockLevel, @ReservedStockLevel, @StockLevel, @StockIt, @SupplierId 在我的代码中,我尝试遵循和的示例 对cmd.Ex

使用
Microsoft.Data.Sqlite
在循环中将产品添加到Sqlite数据库时出错。错误:

Must add values for the following parameters: @ItemCode, @ItemCost, @ItemDescription, @LocationId, @ReorderStockLevel, @ReservedStockLevel, @StockLevel, @StockIt, @SupplierId
在我的代码中,我尝试遵循和的示例

cmd.ExecuteNonQuery()
的第一个调用将触发。在第二次迭代中输入
foreach(newItems中的Product newItem)
时抛出异常。使用和不使用
cmd.Prepare()

数据库中未输入任何产品。数据库连接配置正确,因为一次可以在数据库行中输入产品


如何更新事务中的项目列表?

插入
sql
以两个右括号结束<代码>插入到…)。检查一下out@dr.null谢谢你提醒我注意双括号。那是写问题时的一个打字错误。我对sql进行了编辑,希望它更清晰。不确定是否相关,但cmd.Prepare()应该在循环之外调用一次。@DavidBrowne Microsoft感谢您的建议。我已将
cmd.Prepare
移到“foreach”循环之外。错误是,必须将sql中的
@
符号替换为
$
符号。插入
sql
以两个右括号结束<代码>插入到…)。检查一下out@dr.null谢谢你提醒我注意双括号。那是写问题时的一个打字错误。我对sql进行了编辑,希望它更清晰。不确定是否相关,但cmd.Prepare()应该在循环之外调用一次。@DavidBrowne Microsoft感谢您的建议。我已将
cmd.Prepare
移到“foreach”循环之外。错误是,必须将sql中的
@
符号替换为
$
符号。
using (SqliteConnection con = new(DataService.SqliteConnectionString))
{
    con.Open();
    using (SqliteTransaction transaction = con.BeginTransaction())
    {
        using (SqliteCommand cmd = con.CreateCommand())
        {
            cmd.CommandText =
                    $"INSERT INTO Products 
                        (
                        ItemCode, 
                        ItemCost, 
                        ItemDescription, 
                        LocationId, 
                        ReorderStockLevel, 
                        ReservedStockLevel, 
                        StockLevel, 
                        StockIt, 
                        SupplierId
                        ) 
                    VALUES 
                        (
                        @ItemCode, 
                        @ItemCost, 
                        @ItemDescription, 
                        @LocationId, 
                        @ReorderStockLevel, 
                        @ReservedStockLevel, 
                        @StockLevel, 
                        @StockIt, 
                        @SupplierId
                        )";

            SqliteParameter itemCodeParam = cmd.CreateParameter();
            itemCodeParam.ParameterName = "$ItemCode";
            cmd.Parameters.Add(itemCodeParam);

            SqliteParameter itemCostParam = cmd.CreateParameter();
            itemCostParam.ParameterName = "$ItemCost";
            cmd.Parameters.Add(itemCostParam);

            SqliteParameter itemDescriptionParam = cmd.CreateParameter();
            itemDescriptionParam.ParameterName = "$ItemDescription";
            cmd.Parameters.Add(itemDescriptionParam);

            SqliteParameter locationIdParam = cmd.CreateParameter();
            locationIdParam.ParameterName = "$LocationId";
            cmd.Parameters.Add(locationIdParam);

            SqliteParameter reorderStockLevelParam = cmd.CreateParameter();
            reorderStockLevelParam.ParameterName = "$ReorderStockLevel";
            cmd.Parameters.Add(reorderStockLevelParam);

            SqliteParameter reservedStockLevelParam = cmd.CreateParameter();
            reservedStockLevelParam.ParameterName = "$ReservedStockLevel";
            cmd.Parameters.Add(reservedStockLevelParam);

            SqliteParameter stockLevelParam = cmd.CreateParameter();
            stockLevelParam.ParameterName = "$StockLevel";
            cmd.Parameters.Add(stockLevelParam);

            SqliteParameter stockItParam = cmd.CreateParameter();
            stockItParam.ParameterName = "$StockIt";
            cmd.Parameters.Add(stockItParam);

            SqliteParameter supplierIdParam = cmd.CreateParameter();
            supplierIdParam.ParameterName = "$SupplierId";
            cmd.Parameters.Add(supplierIdParam);

            foreach (Product newItem in newItems)
            {
                itemCodeParam.Value = newItem.ItemCode;
                itemCostParam.Value = newItem.ItemCost;
                itemDescriptionParam.Value = newItem.ItemDescription;
                locationIdParam.Value = newItem.LocationId;
                reorderStockLevelParam.Value = newItem.ReorderStockLevel;
                reservedStockLevelParam.Value = newItem.ReservedStockLevel;
                stockItParam.Value = newItem.StockIt;
                stockLevelParam.Value = newItem.StockLevel;
                supplierIdParam.Value = newItem.SupplierId;
                cmd.ExecuteNonQuery();
            }
            cmd.Prepare();
            transaction.Commit();            
        }
    }
}