如何将行添加到mysql数据库表并将其显示在vb.net的列表框中?

时间:2011-09-25 01:24:17

标签: mysql sql vb.net listbox

我有以下控件:

  • textbox1 - 这是我输入信息的地方。
  • listbox1 - 这是我显示消息的地方。
  • button1 - 这是将我的消息发布到服务器的内容。
  • StatusStrip1.Title1 - 这是当前用户的标题所在的位置。 (即:管理员,经理......等)

我在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”)现在它甚至不会显示当前在“消息”表中的任何消息...)

如果有人能告诉我我做错了什么,或者更有效的方法,那么我会非常感激!谢谢!

2 个答案:

答案 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