【问题标题】:FormatException was unhandled error on vb.netFormatException 在 vb.net 上是未处理的错误
【发布时间】:2018-11-03 10:33:16
【问题描述】:

我是 Stack Overflow 的新手,但无论如何我的代码都有问题。当我尝试运行程序并单击登录功能时,我在此语句中收到错误... 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

【问题讨论】:

  • 我在回答中添加了一些信息,这些信息可能有助于您了解原始代码的实际行为。

标签: mysql vb.net


【解决方案1】:

由于多种原因,这些行是错误的:

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,并由此推断出参数数据类型。然后使用无法转换为IntegerString 设置该参数的Value,因此抛出了FormatException

【讨论】:

    猜你喜欢
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 2022-11-07
    • 2021-07-31
    • 1970-01-01
    • 2016-09-09
    相关资源
    最近更新 更多