2014-11-21 4 views
0

Итак, у меня есть функция обмена мгновенными сообщениями, которые я использую с базой данных. Каждый раз, когда отправляется сообщение, он печатает то, что находится в столбце сообщений в базе данных, в текстовое поле в приложении vb.net.Обновление базы данных VB.NET

Моя проблема. Я должен нажать кнопку «отправить сообщение» дважды, чтобы получить функциональность для работы, так как в первый раз, когда я нажимаю на нее, ничего не происходит

Кто-нибудь знает, где я поступил неправильно? Очень признателен!

Try 
     '----------------Sends the message------------------------------------- 
     MysqlConn.Open() ' opening the connection to the DB 
     Dim query As String 
     query = "insert into dojodb.chats (Message) values ('" & txtMessage.Text & "')" 
     command = New MySqlCommand(query, MysqlConn) 
     reader = command.ExecuteReader 'executes the command and reads data from db 
     reader.Close() 


     '-------------------Retreives the message------------------------------------ 
     Dim sqlStr As String = "SELECT * FROM chats" 
     Dim chatcommand As New MySqlCommand(sqlStr, MysqlConn) 
     Dim rdr As MySqlDataReader = chatcommand.ExecuteReader() 
     Dim tbl As New DataTable 
     tbl.Load(rdr) 


     '-------For every row, print the message, skip a line, and add 1 so it goes to next msg-------- 
     For i As Integer = 0 To tbl.Rows.Count - 1 
      rowIndex = i 
      strOutPut &= CStr(tbl.Rows(rowIndex)("Message")) & vbNewLine 
      i = i + 1 
     Next 

     txtGroupChat.Text = strOutPut 
     strOutPut = "" 'clearing the string so that it does not print out duplicate info next time 

     '-------------------------End Retrieve------------------------------------------- 

     MysqlConn.Close() 
    Catch ex As Exception 
     MessageBox.Show(ex.Message) 'printing the exact error to help future testing if needed 
    Finally 
     MysqlConn.Dispose() 
    End Try 
End Sub 
+0

Не ответ на ваш вопрос, но в случае, если вы не знаете об этом, вы можете прочитать в [SQL Injection] (http://en.wikipedia.org/wiki/SQL_injection) –

+0

Кроме того, у меня есть поле под названием «pk», которое автоматически увеличивается каждый раз, когда сообщение сохраняется в базе данных. Это первичный ключ и используется для сортировки сообщений по самым старым-новейшим для печати в текстовое поле – foley

+0

@JamesThorpe, моя база данных безопасна. Я не сообщил о какой-либо важной информации о подключении. – foley

ответ

0

Я думаю, ваша проблема заключается в следующем разделе:

'-------For every row, print the message, skip a line, and add 1 so it goes to next msg-------- 
For i As Integer = 0 To tbl.Rows.Count - 1 
    rowIndex = i 
    strOutPut &= CStr(tbl.Rows(rowIndex)("Message")) & vbNewLine 
    i = i + 1 
Next 

Почему вы пропуск строки? Это приведет к тому, что каждое другое сообщение в таблице не будет выписано, поэтому вы должны нажать его дважды, чтобы он отображался. Вам не нужно вручную увеличить индексацию в For цикле, я предлагаю вам попробовать это:

For i As Integer = 0 To tbl.Rows.Count - 1 
    rowIndex = i 
    strOutPut &= CStr(tbl.Rows(rowIndex)("Message")) & vbNewLine 
Next 
Смежные вопросы