1

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

Must add values for the following parameters: @ItemCode, @ItemCost, @ItemDescription, @LocationId, @ReorderStockLevel, @ReservedStockLevel, @StockLevel, @StockIt, @SupplierId

在我的代码中,我尝试遵循Microsoft.Data.Sqlite中的批量插入和批量插入中的示例

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

第一次叫cmd.ExecuteNonQuery()火。为第二次迭代输入的异常foreach (Product newItem in newItems)抛出。相同的异常抛出有和没有cmd.Prepare()

没有产品被输入数据库。数据库连接配置是正确的,因为可以一次在数据库行中输入产品。

如何更新交易中的项目列表?

4

0 回答 0