MySQL连接失败“ user @ LAPTOP ...”(使用密码:否)

时间:2019-05-25 14:38:08

标签: mysql vb.net

我绝对是MySQL的初学者,并尝试与Visual Basic程序建立连接。我使用XAMPP并使用密码创建了一个新用户(admin)。当我尝试建立连接时,它将失败,而不是使用正确的密码。 我安装了.NET Connector和ODBC Connector并导入了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

2 个答案:

答案 0 :(得分:0)

将数据库对象保留在本地,以便确保它们已关闭并被处置。 `使用...结束使用块会为您做到这一点,即使出现错误。

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

关于您的Select语句:

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

  2. JOIN通过ON子句完成。如果您确实对WHERE子句有一个以上的条件(此处不是这种情况),那么您将只有一个WHERE,其他条件将用AND分隔。

您必须致电阅读器上的.Read移至第一条记录。 .Read推动DataReader一项记录。

我将插值字符串用于标签文本。它会保存所有这些“与”号和引号,并且插值字符串假定您要使用字符串作为变量,因此不必显式调用.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

答案 1 :(得分:0)

enter image description here该连接有效,但是我尝试以任何方式都找不到列。可以在MySQL和Visual Studio中直接输入它们。

Private Sub btn_KI_Anzeigen_Click(sender As Object, e As EventArgs) Handles btn_KI_Anzeigen.Click
        Dim sql = "SELECT klasse.anzahl_schueler, lehrer.lang FROM klasse JOIN lehrer WHERE klasse.id_tutor = lehrer.id_lehrer AND klasse.id_Klasse = " & id_Klasse
        Using con As New MySqlConnection("server=localhost; database=notava; user id=xxxxx; password=xxxxx")
            Using cmd As New MySqlCommand(sql, con)
                ' cmd.Parameters.Add("@idKlasse", MySqlDbType.Int32).Value = id_Klasse        ' erklärung?
                con.Open()
                Using reader = cmd.ExecuteReader                                            ' erklärung?
                    reader.Read()
                    lbl_KI_Klasseninfo.Text = $"Tutor: " & reader("lehrer.lang") & vbCrLf &
                                               "Anzahl Schüler: " & reader("klasse.anzahl_schueler")
                    reader.Close()
                End Using
            End Using
        End Using
    End Sub

我通知了一个错误注释(大约70000个字符)

Ausnahme ausgelöst: "System.IndexOutOfRangeException" in MySql.Data.dll
System.Transactions Critical: 0 : <TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Critical"><TraceIdentifier>http://msdn.microsoft.com/TraceCodes/System/ActivityTracing/2004/07/Reliability/Exception/Unhandled</TraceIdentifier><Description>Unbehandelte Ausnahme</Description><AppDomain>notava.exe</AppDomain><Exception><ExceptionType>System.IndexOutOfRangeException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType><Message>Could not find specified column in results: klasse.anzahl_schueler</Message><StackTrace>   bei MySql.Data.MySqlClient.ResultSet.GetOrdinal(String name)
   bei MySql.Data.MySqlClient.MySqlDataReader.GetOrdinal(String name)
   bei MySql.Data.MySqlClient.MySqlDataReader.get_Item(String name)