GridView的这个更新命令有什么问题?

时间:2011-03-11 07:03:27

标签: asp.net visual-studio-2008 sqldatasource

Imports System.Data.SqlClient

    Dim constr As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\ASPNETDB.MDF;Integrated Security=True;User Instance=True"


Protected Sub GridView1_RowUpdated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdatedEventArgs) Handles GridView1.RowUpdated
        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_volvo SET travel = @travel WHERE travelid = @travelid"
                        cmd.CommandText = sql
                        cmd.Parameters.AddWithValue("@travel", 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

错误:对象引用未设置为对象的实例..

3 个答案:

答案 0 :(得分:0)

问题在于抛出异常的行。您可以调试代码以检查值或变量。

答案 1 :(得分:0)

使用GridView的传统方式比您尝试的方法容易得多。这是一个.aspx文件,而不是代码隐藏:

<asp:GridView ID="myGV" DataSourceID="myDS" runat="server"/>
<asp:SqlDataSource ID="myDS" SelectCommand="..." UpdateCommand="..." runat="server"/>

答案 2 :(得分:0)

你的问题是

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

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

或同时使用。

可能会发生的情况是,当您分配lab1或lab4时,它没有获取任何值,然后当您尝试分配sql命令参数并给出lab4.Text的值时,如果lab4本身为空,它会抛出`对象引用未设置为对象异常的实例。

但这只是猜测。为了了解forsure,您需要设置断点并调试应用程序。在调试时,请在分配后检查lab1和lab4的值。

希望这有帮助