моя кнопка обновления только обновляет первую проверенную строку, а не другие - PullRequest
0 голосов
/ 01 февраля 2011

Я получил базу данных для обновления, но она делает это только для первой выбранной строки, а не для остальных.

     Protected Sub btnUpdate_Click(ByVal sender As Object, ByVal e As EventArgs)

    For Each row As GridViewRow In GridView6.Rows
        ' Selects the text from the TextBox
        Dim selectedcheck As CheckBox = CType(row.FindControl("chkselect"), CheckBox)

        If selectedcheck.Checked = True Then
            Dim id As Label = CType(row.FindControl("id"), Label)
            cmd.Parameters.AddWithValue("@id", id.Text)
            cmd.Parameters.AddWithValue("@compby", txtagent.Text)
            cmd.Parameters.AddWithValue("@compdate", lbldate.Text)
            cmd.Parameters.AddWithValue("@comments", txtcomments.Text)


            cmd.CommandText = "dbo.updatetasks"
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Connection = conn

            conn.Open()

            cmd.BeginExecuteNonQuery()

            conn.Close()
        End If

    Next

End Sub

enter image description here

UPDATE dashboardtasks
       SET compby = @compby,
           comments = @comments,
           compdate = @compdate


       WHERE id = @id;

1 Ответ

1 голос
/ 01 февраля 2011

Я ожидаю, что сработает следующее:

  Protected Sub btnUpdate_Click(ByVal sender As Object, ByVal e As EventArgs)

    For Each row As GridViewRow In GridView6.Rows
        ' Selects the text from the TextBox
        Dim selectedcheck As CheckBox = CType(row.FindControl("chkselect"), CheckBox)

        If selectedcheck.Checked = True Then
            Dim id As Label = CType(row.FindControl("id"), Label)
            cmd.Parameters.Clear()     '<---- Stop adding more and more parameters
            cmd.Parameters.AddWithValue("@id", id.Text)
            cmd.Parameters.AddWithValue("@compby", txtagent.Text)
            cmd.Parameters.AddWithValue("@compdate", lbldate.Text)
            cmd.Parameters.AddWithValue("@comments", txtcomments.Text)


            cmd.CommandText = "dbo.updatetasks"
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Connection = conn

            conn.Open()

            cmd.ExecuteNonQuery() '<--- Don't use the asynchronous variant if you're not going to obey the contract

            conn.Close()
        End If

    Next

End Sub

Вы бы получили хорошее исключение, сообщающее, что вы сделали неправильно, если бы использовали синхронный вариант ExecuteNonQuery, иливыполнил контракт для асинхронных методов (где вам нужно вызвать EndExecuteNonQuery, чтобы узнать результат вашего вызова SQL.

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