丢失运算符时出错?

时间:2016-03-12 23:43:32

标签: vb.net

请帮助我,不知道该怎么做。只是想更新信息。但这是错误,并没有给出一个或多个必需参数的值。' 这是我的实际代码:

            str = "UPDATE Expenses SET TuitionFee = @TFee, BookFee = @Bfee, MiscellaneousFee = @Mfee, OtherFee = @Ofee WHERE YearLevel = @YL"
    mycmd = New OleDbCommand(str, conn)

    mycmd.Parameters.AddWithValue("@YL", txtYearLevel.Text)
    mycmd.Parameters.AddWithValue("@TFee", txtTFee.Text)
    mycmd.Parameters.AddWithValue("@Bfee", txtBFee.Text)
    mycmd.Parameters.AddWithValue("@Mfee", txtMFee.Text)
    mycmd.Parameters.AddWithValue("@Ofee", txtOFee.Text)

    mycmd.ExecuteNonQuery()

1 个答案:

答案 0 :(得分:0)

您的SQL语句指定了一个名为OFee的参数,但您没有提供它。你提供一个名为OtherFee的人,看起来就像你让名字混淆了一样。

变化:

mycmd.Parameters.AddWithValue("@OtherFee", txtYearLevel.Text)

对此:

mycmd.Parameters.AddWithValue("@OFee", txtYearLevel.Text)

虽然不是导致此错误的原因,但您将所有参数设置为相同的值,这很可能不正确。另外,请注意有关参数化查询的所有注释,这非常重要。

仔细观察后,我发现您使用的OleDbCommand不支持命名参数。您必须使用?指定它们,并以与SQL语句相同的顺序添加它们。请参阅MSDN

  

OLE DB .NET提供程序不支持传递的命名参数   SQL语句或由a调用的存储过程的参数   CommandType设置为Text时的OleDbCommand。在这种情况下,   必须使用问号(?)占位符。例如:SELECT * FROM   客户WHERE CustomerID =?因此,顺序在哪   OleDbParameter对象必须添加到OleDbParameterCollection中   直接对应于问号占位符的位置   用于命令文本中的参数。