我有以下控件:
我在MYSQL数据库上有一个名为“messages”的表和一个名为“message”的列。当我在textbox1中键入内容并单击button1时,我想在“消息”列下的“消息”中添加一行,标题和消息为其值。(用连字符,破折号或其他小分隔符分隔)然后重新加载listbox1的显示新消息的内容。
所以我想最后的消息是这样的:
管理员 - Hello World!
我目前有以下代码:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim sqlpost As MySqlCommand = New MySqlCommand("INSERT INTO messages(message) VALUES(?name - ?message)"";", con)
sqlpost.Parameters.AddWithValue("?name", Title2.Text)
sqlpost.Parameters.AddWithValue("?message", TextBox1.Text)
Try
con.Close()
con.Open()
' Sending message.
If TextBox1.Text = "" Then
MessageBox.Show("You forgot to type a message!")
Else
sqlpost.ExecuteNonQuery()
' Reloading messages.
ListBox1.Items.Clear()
reader = sqlmessages.ExecuteReader()
While (reader.Read)
ListBox1.Items.Add(reader.Item("message"))
ListBox1.Items.Add("")
End While
reader.Close()
con.Close()
TextBox1.Text = ""
Label4.Text = "Message Sent!"
Timer2.Start()
End If
Catch myerror As MySqlException
MessageBox.Show("Error sending message to server: " & myerror.Message)
End Try
End Sub
之前我有过它的工作,但是当我对它进行更改时,它会出现各种sql语句语法错误...(无效的截断值为“Administrator”,或者无效的DOUBLE值“hello”)现在它甚至不会显示当前在“消息”表中的任何消息...)
如果有人能告诉我我做错了什么,或者更有效的方法,那么我会非常感激!谢谢!
答案 0 :(得分:2)
我看到一件看起来不正确的事情是你正在使用"?"为您在查询中的参数名称。用于参数名称的默认字符是用" @"开始它们。虽然我认为有一个连接字符串选项可以使用"?"因为这是旧版本的MySQL连接器中使用的,但当前的默认值为" @"。此外,一般来说,您的命令似乎存在一些问题。你有:
Dim sqlpost As MySqlCommand = New MySqlCommand("INSERT INTO messages(message) VALUES(?name - ?message)"";", con)
它应该更像是
Dim sqlpost As MySqlCommand = New MySqlCommand("INSERT INTO messages(message) VALUES(@message);", con)
我修了一下查询,并取代了?与@。您可以在VB中执行名称和消息的连接(当您在注释中清除时),并使用以下代码:
sqlpost.Parameters.AddWithValue("@message", Title2.Text & " - " & Title2.Text)
我也看到你在打电话
sqlmessages.ExecuteReader()
但我不知道这是在哪里初始化。
答案 1 :(得分:0)
您必须使用单个参数。
Dim con as New MySqlConnection
con.ConnectionString="set_connection_string_here"
Dim sqlpost As MySqlCommand = New MySqlCommand("INSERT INTO `messages` (`message`) VALUES (@name)",con)
sqlpost.Parameters.AddWithValue("@name", Title2.Text & " - " & TextBox1.Text)
If TextBox1.Text = "" Then
MessageBox.Show("You forgot to type a message!")
Else
con.Open()
sqlpost.ExecuteNonQuery()
con.Close()
ListBox1.Items.Clear()
sqlmessages.CommandText="select * from `messages`"
sqlmessages.Connection=con
reader = sqlmessages.ExecuteReader()
While (reader.Read)
ListBox1.Items.Add(reader.Item("message"))
End While
reader.Close()
con.Close()
End If