vb.net上发生未处理的formatexception错误

gopyfrb3  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(306)

我是新来的堆栈溢出,但无论如何,我有问题,关于我的代码。当我试图运行程序,并点击登录功能,我得到一个关于这个语句的错误。。。它说: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
jjjwad0x

jjjwad0x1#

这些行是错误的,原因有很多:

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 然后使用 String 无法转换为 Integer 因此 FormatException 被扔了。

相关问题