в чем проблема в этом запросе он удалит все записи таблицы! - PullRequest
0 голосов
/ 16 февраля 2011
 Protected Sub GridView3_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView3.RowCommand
        For Each myRow As GridViewRow In GridView3.Rows
            'Find the checkbox
            Dim lab1 As Label = DirectCast(myRow.FindControl("Label1"), Label)
            If e.CommandName = "Sumit" Then
                Dim cmd As New Data.SqlClient.SqlCommand
                Dim con As New Data.SqlClient.SqlConnection(constr)
                Try
                    Dim strSql As String = "DELETE * FROM hotels WHERE hotelid =" & lab1.Text

                    '------------"
                    con.Open()
                    cmd.Connection = con
                    cmd.CommandText = strSql
                    cmd.ExecuteNonQuery()
                Catch ex As Exception
                    Response.Write(ex.Message)
                Finally
                    cmd.Dispose()
                    con.Dispose()
                End Try
            End If
        Next
        GridView3.DataBind()
    End Sub

Ответы [ 2 ]

4 голосов
/ 16 февраля 2011

Я не уверен, почему вы думаете, что это удалит все в таблице, так как я совершенно уверен, что она даже не выполнится.DELETE не требует указания столбцов или *.Это должно быть просто DELETE FROM hotels WHERE [etc, etc].

Кроме того, вы должны серьезно подумать над прочтением этой статьи: Как: защитить от SQL-инъекций в ASP.NET .В частности, «Шаг 3. Использование параметров с динамическим SQL», в котором подробно описано, как можно изменить код для предотвращения внедрения SQL.

0 голосов
/ 16 февраля 2011

Я считаю, что вы ищете это:

Protected Sub GridView3_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView3.RowCommand
    Dim myRow As GridViewRow = DirectCast((System.Web.UI.Control)(sender)).NamingContainer, GridViewRow)

    'Find the checkbox
    Dim lab1 As Label = DirectCast(myRow.FindControl("Label1"), Label)

    If e.CommandName = "Sumit" Then
        Dim cmd As New Data.SqlClient.SqlCommand
        Dim con As New Data.SqlClient.SqlConnection(constr)
        Try
        Dim strSql As String = "DELETE FROM hotels WHERE hotelid =" & lab1.Text

        '------------"
        con.Open()
        cmd.Connection = con
        cmd.CommandText = strSql
        cmd.ExecuteNonQuery()
        Catch ex As Exception
        Response.Write(ex.Message)
        Finally
        cmd.Dispose()
        con.Dispose()
                End Try
            End If

            GridView3.DataBind()
        End Sub

Синтаксис может быть отключен. Я не слишком знаком с VB. Кроме того, было бы лучше передать идентификатор записи отеля в e.CommandArgument, поэтому вам не придется извлекать его из ярлыка на странице. Он удаляет все ваши записи, потому что вы перебираете все свои строки в виде сетки и удаляете каждую запись.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...