问题描述
我在循环中使用 Microsoft.Data.sqlite
将产品添加到 sqlite 数据库时出错。错误:
Must add values for the following parameters: @ItemCode,@ItemCost,@ItemDescription,@LocationId,@ReorderStockLevel,@ReservedStockLevel,@StockLevel,@StockIt,@supplierId
在我的代码中,我尝试遵循 Bulk Insert in Microsoft.Data.Sqlite 和 Bulk insert
中的示例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,@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()
没有产品输入到数据库中。数据库连接配置正确,产品可以一次进入数据库行。
如何更新交易中的项目列表?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)