【问题标题】:MySQL connection failing "user@LAPTOP..." (using password: NO)MySQL 连接失败“user@LAPTOP ...”(使用密码:否)
【发布时间】:2019-05-30 23:35:08
【问题描述】:

我是 MySQL 的绝对初学者,并试图建立与我的 Visual Basic 程序的连接。我使用 XAMPP 并使用密码创建了一个新用户(管理员)。当我尝试建立连接时,它会失败,而不是使用正确的密码。 我安装了 .NET 连接器和 ODBC 连接器并导入了 MySQL dll。

如果你能帮助我,请尽可能详细地回答。

Private Sub btn_KI_Anzeigen_Click(sender As Object, e As EventArgs) Handles btn_KI_Anzeigen.Click
    Dim connectionString As String = "server=localhost; database=notava; user id=****; password=****"

    con.Open()
    cmd.CommandText = "SELECT *, lehrer.name FROM klasse JOIN lehrer WHERE klasse.id_Klasse = " & id_Klasse & "AND WHERE klasse.id_tutor = lehrer.id_lehrer"

    reader = cmd.ExecuteReader
    lbl_KI_Klasseninfo.Text = "Klasse: " & cmb_KI_Jahrgang.SelectedItem & cmb_KI_Klasse.SelectedItem & vbCrLf &
                                vbCrLf & "Anzahl Schüler: " & reader("klasse.Anzahl_Schueler") & vbCrLf &
                                vbCrLf & "Tutor: " & reader("lehrer.name")
    reader.Close()
    con.Close()
End Sub

错误:

MySql.Data.MySqlClient.MySqlException:“主机身份验证” 用户''使用方法'mysql_native_password'失败并显示消息: 用户 ''@'LAPTOP-D1CFSJ0F.speedport.ip' 的访问被拒绝(使用 password: NO)"

MySqlException: 拒绝用户访问 ''@'LAPTOP-D1CFSJ0F.speedport.ip'(使用password: NO

【问题讨论】:

  • 不是您当前的问题,而是您的sql语句充满了错误。而且我什至不开始谈论sql注入漏洞
  • 你真的要在 Internet 上发布你的 MySql 凭据吗??
  • 也给nacho服务器ip,也许他可以远程帮助:P
  • connectionString 不是con 正在使用的连接字符串。您必须将其实际分配给某些东西,例如 con.ConnectionString = connectionString

标签: mysql vb.net


【解决方案1】:

将您的数据库对象保存在本地,这样您就可以确保它们已关闭和处置。 `Using...End Using blocks 会为你做这件事,即使有错误。

将您的连接字符串直接传递给连接的构造函数。 将sql语句和连接直接传递给命令的构造函数。

关于您的 Select 声明:

  1. 不要使用“*”。您将获得两个表中的所有字段。看起来您只需要每个表中的一个字段。不要检索不必要的数据。

  2. JOIN 是通过 ON 子句完成的。如果 WHERE 子句确实有多个条件(此处不是这种情况),您将有一个 WHERE,并且其他条件将由 AND 分隔。

您必须在阅读器上调用.Read 才能移动到第一条记录。 .ReadDataReader 推进一条记录。

我为标签文本使用了一个插值字符串。它保存了所有这些 & 和引号,并且 Interpolated 字符串假定您想要一个字符串形式的变量,因此您不必显式调用 .ToString。您可以通过按 Enter 来添加硬回车。 VB 再次为您添加了回车符,避免了额外输入 & 和引号。

关于连接字符串。看起来数据库在同一台机器上。我的连接字符串看起来像这样server=localhost;user id=****;password=****;database=student,其中 **** 将被您的凭据替换。此 URL 包含您想知道的有关连接字符串的所有信息。 https://www.connectionstrings.com/mysql/

Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    Dim sql = "SELECT klasse.Anzahl_Schueler, lehrer.name FROM klasse JOIN lehrer ON klasse.id_tutor = lehrer.id_lehrer WHERE klasse.id_Klasse = @idKlasse"
    Using con As New MySqlConnection("server=localhost; database=notava; user id=****; password=****")
        Using cmd As New MySqlCommand(sql, con)
            cmd.Parameters.Add("@idKlasse", MySqlDbType.Int32).Value = id_Klasse
            con.Open()
            Using reader = cmd.ExecuteReader
                reader.Read()
                lbl_KI_Klasseninfo.Text = $"Klasse: {cmb_KI_Jahrgang.SelectedItem} {cmb_KI_Klasse.SelectedItem} 

Anzahl Schüler: {reader("klasse.Anzahl_Schueler")} 

Tutor: {reader("lehrer.name")}"
            End Using
        End Using
    End Using
End Sub

【讨论】:

  • 嘿,我试过了。它有效,我非常感谢!几周以来我一直在寻找解决方案,现在我可以继续工作了。非常感谢!
猜你喜欢
  • 2020-12-22
  • 1970-01-01
  • 2020-07-10
  • 2018-04-21
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多