В чем проблема с этим кодом? - PullRequest
0 голосов
/ 11 марта 2011

Я отредактировал это, но такая же проблема:

Protected Sub SqlDataSource1_Updated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceStatusEventArgs) Handles SqlDataSource1.Updated
    For Each myRow As GridViewRow In GridView1.Rows
        'Find the checkbox
        Dim lab1 As Label = DirectCast(myRow.FindControl("Label1"), Label)
        Dim lab4 As Label = DirectCast(myRow.FindControl("Label4"), Label)
        Try
            Using conn = New SqlConnection(constr)
                Using cmd = conn.CreateCommand()
                    conn.Open()
                    Dim sql As String = "UPDATE a1_ticket SET Travels = @travels WHERE travelid = @travelid"
                    cmd.CommandText = sql
                    cmd.Parameters.AddWithValue("@travels", lab4.Text)
                    cmd.Parameters.AddWithValue("@travelid", lab1.Text)
                    cmd.ExecuteNonQuery()
                End Using
            End Using
        Catch ex As Exception
            Response.Write(ex.Message)
        End Try
    Next
End Sub

Ошибка: Ссылка на объект не установлена ​​в момент возникновения объекта

Ответы [ 2 ]

1 голос
/ 11 марта 2011

Я сильно подозреваю, что это будет виновником:

Dim lab1 As Label = DirectCast(myRow.FindControl("Label1"), Label)
Dim lab4 As Label = DirectCast(myRow.FindControl("Label4"), Label)

FindControl возвращает ноль / ничего, если не удается найти элемент управления с этим идентификатором. Я предполагаю, что, поскольку у вас есть потенциально несколько строк, идентификаторы элементов управления в каждой строке автоматически генерируются с дополнительной информацией. Я предлагаю вам взглянуть на HTML-код на странице и посмотреть, что генерируется ... возможно, вы захотите найти лучший способ найти отдельный элемент управления в строке.

Как уже упоминалось в комментариях, вам следует параметризовать свои операторы SQL, чтобы избежать атак внедрения SQL.

1 голос
/ 11 марта 2011

Ошибка в этой строке: Dim strSql As String = "UPDATE a1_ticket SET Travels = '" & lab4.Text & "' WHERE travelid =" & lab1.Text

travelid is Text so it should be travelid='" & lab4.Text & "'".
...