我是Stack Overflow的新手,但是无论如何我在代码方面都遇到了问题。当我尝试运行该程序并单击Login函数时,在此语句上出现错误... Adapter.Fill(Table)它说:未处理FormatException。 mscorlib.dll中发生了'System.FormatException'类型的未处理异常。其他信息:输入字符串的格式不正确。
Imports MySql.Data.MySqlClient
Public Class Login_page
Private Sub Login_page_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.CenterToScreen()
End Sub
Private Sub PictureBox3_Click(sender As Object, e As EventArgs) Handles PictureBox3.Click
Close()
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim MysqlConnection As New MySqlConnection("host=127.0.0.1; user=root; database = storage_db")
Dim Command As New MySqlCommand("SELECT * FROM `login_access` where username = @username and password = @password", MysqlConnection)
Command.Parameters.AddWithValue("@username", SqlDbType.VarChar).Value = TextBoxUsername.Text
Command.Parameters.AddWithValue("@password", SqlDbType.VarChar).Value = TextBoxPassword.Text
Dim Adapter As New MySqlDataAdapter(Command)
Dim Table As New DataTable()
Adapter.Fill(Table)
If Table.Rows.Count() <= 0 Then
MessageBox.Show("Invalid")
Else
MessageBox.Show("Login Successfully")
End If
End Sub
End Class
答案 0 :(得分:2)
这些行的错误有多种原因:
Command.Parameters.AddWithValue("@username", SqlDbType.VarChar).Value = TextBoxUsername.Text
Command.Parameters.AddWithValue("@password", SqlDbType.VarChar).Value = TextBoxPassword.Text
首先,您将MySqlClient
用于MySQL,而不是SqlClient
用于SQL Server。这意味着您需要使用MySqlDbType
而不是SqlDbType
。
第二和第三,您需要确定要使用Add
还是AddWithValue
,因为实际上是混合和匹配。如果您使用AddWithValue
,则不会指定数据类型,因为它是根据值推断的:
Command.Parameters.AddWithValue("@username", TextBoxUsername.Text)
Command.Parameters.AddWithValue("@password", TextBoxPassword.Text)
但是通常不建议这样做,因为推断的类型通常不是您想要的类型。这意味着您应该使用Add
。在这种情况下,您还应该指定可变长度数据类型的大小:
Command.Parameters.Add("@username", MySqlDbType.VarChar, 50).Value = TextBoxUsername.Text
Command.Parameters.Add("@password", MySqlDbType.VarChar, 50).Value = TextBoxPassword.Text
编辑:
为了记录,您的原始代码中发生的基本上是这样的:
Dim p = Command.Parameters.AddWithValue("@username", SqlDbType.VarChar)
p.Value = TextBoxUsername.Text
因此,正在添加一个值为SqlDbType.VarChar
的参数,该值将被解释为Integer
并由此推断出参数数据类型。然后使用无法转换为Value
的{{1}}设置了该参数的String
,因此抛出了Integer
。