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()
没有产品被输入数据库。数据库连接配置是正确的,因为可以一次在数据库行中输入产品。
如何更新交易中的项目列表?