vb.net SQL-запрос работает на SQL-сервере, но не при вызове из флажка - PullRequest
1 голос
/ 21 ноября 2010

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

Я пытаюсь заставить его изменить значение столбца, который определяет начальное значение флажков, но написанный мной SQL не работает при вызове vb.net - он работает при вводе вручную в сервер SQL, однако.

Вот мой код:

Public Sub checkbox_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs) 'Handles checkbox.CheckedChanged
    Dim connectionString As String = WebConfigurationManager.ConnectionStrings("edinsec").ConnectionString


    Dim box As CheckBox = DirectCast(sender, CheckBox)
    Dim tblcell As TableCell = CType(box.Parent, TableCell)
    Dim dgRow As GridViewRow = CType(tblcell.Parent, GridViewRow)

    Dim msgId As Integer = unreadMessages.Rows(dgRow.DataItemIndex).Cells(0).Text

    Dim insertSQL As String

    If box.Checked = True Then
  insertSQL = "UPDATE messages"
  insertSQL &= "SET readit = 0"
  insertSQL &= "WHERE msgid = @msgId"
    Else
  insertSQL = "UPDATE messages"
  insertSQL &= "SET readit = 1"
  insertSQL &= "WHERE msgid = @msgId"
    End If

    Using con As New SqlConnection(connectionString)
  Dim cmd As New SqlCommand(insertSQL, con)
  cmd.Parameters.AddWithValue("@msgId", msgId)
  Try
      con.Open()
      cmd.ExecuteNonQuery()
  Catch Err As SqlException
      MsgBox("Error", 65584, "Insertion Error")
  End Try
  con.Close()
    End Using

End Sub

Идея состоит в том, что при нажатии этот флажок перевернет значение 'readit' в базе данных на противоположное. Однако он продолжает переходить к SqlException, поэтому я вижу сообщение об ошибке.

Код aspx для флажков следующий:

          <asp:TemplateField HeaderText="readit" SortExpression="readit">
    <ItemTemplate>
        <asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true" OnCheckedChanged="checkbox_CheckedChanged" Checked='<%# Bind("readit") %>' 
            Enabled="true" />
    </ItemTemplate>
    <EditItemTemplate>
        <asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true" OnCheckedChanged="checkbox_CheckedChanged" Checked='<%# Bind("readit") %>' />
    </EditItemTemplate>
      </asp:TemplateField>

Любая помощь будет высоко ценится. Visual Studio (2008) дает ноль отзывов об ошибках SQL в этой ситуации, что довольно раздражает.

1 Ответ

1 голос
/ 21 ноября 2010

Вам нужно добавить несколько пробелов в вашем обновлении:

   If box.Checked = True Then
      insertSQL = "UPDATE messages "
      insertSQL &= "SET readit = 0 "
      insertSQL &= "WHERE msgid = @msgId"
   Else
      insertSQL = "UPDATE messages "
      insertSQL &= "SET readit = 1 "
      insertSQL &= "WHERE msgid = @msgId"
   End If

Обратите внимание, что я добавил пробелы после messages и после readit = 0/1. В противном случае ваш оператор будет UPDATE messagesSET ..., который также не работает в SSMS.

...