无法弄清楚我的代码出了什么问题。我想从mysql数据库中检索一个sha256密钥。
keys table:
Id(int 4) | key (varchar64)
1 | 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8
myAdapter.Fill(mydataatable)一行不断抛出错误
MySql.Data.MySqlClient.MySqlException未处理
ErrorCode = -2147467259 Message =您的SQL语法中有错误; 检查与您的MySQL服务器版本对应的手册 在第1行的'keys WHERE id = 1'附近使用正确的语法
以下是完整的错误日志: http://pastebin.com/EG4GfywA
这是我的代码,我从youtube上学到了......
Dim connectDatabase As New MySqlConnection("Server=localhost;User Id=root;Password=testing123;Database=flag15")
If TextBox1.Text = "" Then
MessageBox.Show("Please input a user id", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
Else
Dim myAdapter As New MySqlDataAdapter("SELECT * FROM keys WHERE id= " & TextBox1.Text, connectDatabase)
Dim mydataatable As New DataTable
myAdapter.Fill(mydataatable)
If mydataatable.Rows.Count > 0 Then
Label4.Text = mydataatable.Rows(0).Item("key")
Else
MessageBox.Show("User ID is not found", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
TextBox1.Text = ""
Label4.Text = ""
End If
End If
答案 0 :(得分:0)
对我来说似乎是正确的。尝试添加“;”在查询结束时。
将myAdapter变暗为新的MySqlDataAdapter(“SELECT * FROM keys WHERE id =”& Integer.parse(Trim(TextBox1.Text))+“;”,connectDatabase)
我添加了一个trim和Integer分析,以防你传递更多空白字符。
尝试记录并发布您正在运行的FINAL查询。
答案 1 :(得分:0)
我假设你需要WHERE id= ...
左右的撇号。但是,您对sql-injection持开放态度。不要连接你的sql字符串,而是使用sql-parameters。
Using con = New MySqlConnection("Server=localhost;User Id=root;Password=testing123;Database=flag15")
Using myAdapter = New MySqlDataAdapter("SELECT * FROM keys WHERE id=@id", con)
myAdapter.SelectCommand.Parameters.AddWithValue("@id", TextBox1.Text)
Dim mydataatable As New DataTable
myAdapter.Fill(mydataatable)
'...'
End Using
End Using