我有MySQL数据库和VB.Net项目。
我创建了一个子程序来执行任何SQL语句,它运行良好。

Public Sub Me_Sub_GetUpdate(ByVal SqlStr As String, ByVal xPar() As MySqlParameter)
    Try
        xCMD = New MySqlCommand(SqlStr, Conn)
        xCMD.CommandType = CommandType.Text

        If xPar IsNot Nothing Then
            For i As Integer = 0 To xPar.Length - 1
                xCMD.Parameters.Add(xPar(i))
            Next
        End If

        If Conn.State = ConnectionState.Open Then Conn.Close()
        Conn.Open()
        xCMD.ExecuteNonQuery()
        Conn.Close()
        xCMD.Dispose()

    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub


当我使用下一个子例程更新记录时:

Try
         Dim SqlStr As String
         Dim xParam As MySqlParameter() = New MySqlParameter(1) {}
         xParam(0) = New MySqlParameter("@ID", SqlDbType.TinyInt)
         xParam(0).Value = 1
         xParam(1) = New MySqlParameter("@TheName1", SqlDbType.NVarChar)
         xParam(1).Value = Trim(Me.t1.Text)

         SqlStr = "UPDATE tblcominfo Set TheName1=@TheName1 Where ID = @ID"

         xCLS.Me_Sub_GetUpdate(SqlStr, xParam)
     Catch ex As Exception
         MessageBox.Show(ex.Message)
     End Try


我收到一条消息(输入字符串的格式不正确)!

当我删除参数并使用直接值运行更新代码时,它就起作用了!!

我不知道出什么问题了,您能帮我吗?

最佳答案

问题是您使用的是SqlDbType,而不是MySqlDbTypeSqlDbType由SQL Server提供程序使用。由于使用的是MySQL,因此需要使用MySqlDbType

您要调用的构造函数不是您期望的那个:

new MySqlParameter("@TheName1", SqlDbType.NVarChar)


...正在调用采用(name As String, value As Object)的构造函数,因为不存在采用SqlDbType的重载。然后,您将覆盖该值,并且MySqlDbType属性是默认值(可能是MySqlDbType.Decimal)。

另一方面,如果传递MySqlDbType值:

new MySqlParameter("@TheName1", MySqlDbType.VarChar)


...它将调用采用(name As String, dbType As MySqlDbType)的构造函数,并且将从中初始化MySqlDbType属性。

10-07 13:11