使用参数更新MySQL记录不起作用

时间:2013-12-26 17:26:13

标签: mysql vb.net

美好的一天,我在更新MySQL中的记录时遇到了问题。以下代码在VB.Net中。每当我执行代码时,我都没有错误,但信息没有保存在表格中。请告诉我我做错了什么。

SQLstr = "UPDATE mainfinancials SET charge1=?charge1, charge2=?charge2, charge3=?charge3, charge4=?charge4, charge5=?charge5" _
            & " WHERE acct='?acct';"
        Pcomm.CommandText = SQLstr
        If IsNumeric(txtCharge1.Text) Then Pcomm.Parameters.AddWithValue("?charge1", CDbl(txtCharge1.Text))
        If IsNumeric(txtCharge2.Text) Then Pcomm.Parameters.AddWithValue("?charge2", CDbl(txtCharge2.Text))
        If IsNumeric(txtCharge3.Text) Then Pcomm.Parameters.AddWithValue("?charge3", CDbl(txtCharge3.Text))
        If IsNumeric(txtCharge4.Text) Then Pcomm.Parameters.AddWithValue("?charge4", CDbl(txtCharge4.Text))
        If IsNumeric(txtCharge5.Text) Then Pcomm.Parameters.AddWithValue("?charge5", CDbl(txtCharge5.Text))
        Pcomm.Parameters.AddWithValue("?acct", txtAcct.Text)
        MsgBox(SQLstr)
        Try
            PConn.Open()
            Pcomm.ExecuteNonQuery()
            PConn.Close()
            PConn.Dispose()
        Catch ex As MySqlException
            MsgBox(ex.Message.ToString())
            PConn.Close()
        End Try

我故意在代码中放置错误,它会返回错误消息。 有人可以帮我弄这个吗。 感谢

1 个答案:

答案 0 :(得分:1)

请勿使用单引号括起参数占位符

" WHERE acct=?acct;"

将参数占位符括在单引号中将其名称转换为文字值。因此,您要查询的是acct列包含字面值'?acct'的记录 当然它什么都没找到,什么都没有更新

顺便说一下,一旦参数占位符出现在查询字符串中,就应该为它提供一个参数。如果您忘记添加参数,则在执行命令时会发生错误,指出缺少预期参数。

您为IsNumeric进行测试,并且只有在成功完成后才添加参数。我认为如果您的充电参数中的某些内容不正确,您应该先测试此错误情况并中止更新。