【发布时间】:2022-01-11 17:53:18
【问题描述】:
我正在尝试使用参数化的 OLEDB 命令更新 MS Access 数据库。每次我尝试时,它都会给我这个例外:System.Data.OleDb.OleDbException: 'No value given for one or more required parameters.'
在 Access 中运行查询可以正常工作,但在我的 WinForm 程序中由于某种原因它失败了。
string x =
$"UPDATE CharMain " +
$"SET CharMain.SpeciesAndStock = @SpeciesStock, " +
$"CharMain.Mig = @Might, " +
$"CharMain.Con = @Con, " +
$"CharMain.Dex = @Dex, " +
$"CharMain.Per = @Per, " +
$"CharMain.[Int] = @Int, " +
$"CharMain.Res = @Res, " +
$"CharMain.[Size] = @Size, " +
$"CharMain.Stride = @Stride " +
$"WHERE CharMain.[ID] = @ID;";
OleDbCommand command = new OleDbCommand(x, Flowsheet_101___Culture.conn);
OleDbParameter[] param = new OleDbParameter[10];
param[0] = new OleDbParameter("@SpeciesStock", speciesStock);
param[1] = new OleDbParameter("@Might", array["Might"]);
param[2] = new OleDbParameter("@Con", array["Constitution"]);
param[3] = new OleDbParameter("@Dex", array["Dexterity"]);
param[4] = new OleDbParameter("@Per", array["Perception"]);
param[5] = new OleDbParameter("@Int", array["Intelligence"]);
param[6] = new OleDbParameter("@Res", array["Resolve"]);
param[7] = new OleDbParameter("@Size", size);
param[8] = new OleDbParameter("@Stride", stride);
param[9] = new OleDbParameter("@ID", Flowsheet_101___Culture.thisCharID);
command.Parameters.Add(param[0]);
command.Parameters.Add(param[1]);
command.Parameters.Add(param[2]);
command.Parameters.Add(param[3]);
command.Parameters.Add(param[4]);
command.Parameters.Add(param[5]);
command.Parameters.Add(param[6]);
command.Parameters.Add(param[7]);
command.Parameters.Add(param[8]);
command.Parameters.Add(param[9]);
command.ExecuteNonQuery();
【问题讨论】:
-
来自文档“当 CommandType 设置为 Text 时,OLE DB .NET 提供程序不支持将参数传递给 SQL 语句或由 OleDbCommand 调用的存储过程的命名参数。在这种情况下,必须使用问号 (?) 占位符。” docs.microsoft.com/en-us/dotnet/api/…
-
@Ralf 我确实在其他一些答案中看到了这一点。我认为由于我的参数与查询中的参数顺序相同,所以应该没关系吧?
标签: c# winforms ms-access oledb