用准备好的语句写入mysql

时间:2017-03-06 22:34:10

标签: mysql vb.net prepared-statement

我正在尝试使用vb.net中的函数来构建一个准备好的语句来保存到mysql数据库,但是使用.net连接器为mysql提供的示例,我很难让它工作。

我的功能看起来像这样......

Public Function TestSQLUpdate(ByVal link_id As String, ByRef updatetext As String, ByRef entrytype As String)
    Dim conn As New MySqlConnection
    Dim cmd As New MySqlCommand

    conn.ConnectionString = main.connection_string
    Try
        conn.Open()
        cmd.Connection = conn

        cmd.CommandText = "INSERT INTO case_updates VALUES(@lid, @updatext, @entrytype, @user)"
        cmd.Prepare()

        cmd.Parameters.AddWithValue("@lid", lid)
        cmd.Parameters.AddWithValue("@updatetxt", updatetext)
        cmd.Parameters.AddWithValue("@entrytype", entrytype)
        cmd.Parameters.AddWithValue("@user", main.activeuser)
        cmd.ExecuteNonQuery()

    Catch ex As MySqlException
        MessageBox.Show("Error " & ex.Number & " has occurred: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
    End Try
End Function

我正在运行此测试,但得到错误:

  

列数与第1行的值计数不匹配

我的字段数与参数数量相同,所以我不确定哪里出错了。

对不起,如果这是一个愚蠢的问题;当你知道答案时,它们很容易! :)

1 个答案:

答案 0 :(得分:0)

错误不是参数计数与提供的参数数量不匹配的结果。

在insert语句中,您没有指定要将值插入哪些列,因此mysql希望您为表中的所有列提供值。 case_updates表有4列以上,因此出现错误消息。您需要为values()子句中的表中的所有列提供值,或者您需要列出要插入的列。

INSERT INTO case_updates(lid, updatetext, entrytype, `user`) ...

(假设您的字段名称与参数名称匹配)