如何解决使用事务批量更新 SQLite
我在循环中使用 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 举报,一经查实,本站将立刻删除。