我绝对是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
)
答案 0 :(得分:0)
将数据库对象保留在本地,以便确保它们已关闭并被处置。 `使用...结束使用块会为您做到这一点,即使出现错误。
将连接字符串直接传递给连接的构造函数。 将sql语句和连接直接传递给命令的构造函数。
关于您的Select语句:
请勿使用“ *”。您将获得两个表中的所有字段。看起来您只需要每个表中的一个字段。不要检索不必要的数据。
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)