我有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
,而不是MySqlDbType
。 SqlDbType
由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
属性。