Как добавить строки в таблицу базы данных MySQL и отобразить ее в списке в vb.net? - PullRequest
0 голосов
/ 25 сентября 2011

У меня есть следующие элементы управления:

  • textbox1 - именно здесь я набираю сообщение.
  • listbox1 - здесь я отображаю сообщения.
  • button1 - это то, что отправляет мои сообщения на сервер.
  • StatusStrip1.Title1 - , куда пойдет заголовок текущего пользователя. (т. е. администратор, менеджер ... и т. д.)

У меня есть таблица в базе данных MYSQL под названием «messages» и столбец с именем «message». Когда я набираю что-то в textbox1 и нажимаю button1, я хочу добавить строку к «messages» под столбцом «message» с заголовком и сообщением в качестве значения (разделенных дефисом, тире или другим небольшим разделителем). содержимое для отображения нового сообщения.

поэтому я хочу, чтобы последнее сообщение было примерно таким:

Администратор - 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 ... (например, недопустимое усеченное значение «Администратор» или недопустимое значение DOUBLE «Привет») он даже не отображает никаких сообщений, находящихся в данный момент в таблице «messages» ...)

Если бы кто-нибудь мог сказать мне, что я делаю неправильно, или более эффективный способ сделать это, тогда я был бы очень признателен! Спасибо!

Ответы [ 2 ]

2 голосов
/ 25 сентября 2011

Одна вещь, которую я вижу, что выглядит неправильно, это то, что вы используете "?"для вас имена параметров в запросе.Символ по умолчанию, используемый для имен параметров, должен начинаться с «@».Хотя я думаю, что есть опция строки подключения для использования "?"поскольку именно это использовалось в более старых версиях коннектора 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()

но я не вижу, где это инициализируется.

0 голосов
/ 25 сентября 2011

Вы должны использовать один параметр.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...