当我在页面加载时使用数据 reader 附加文本框的内容时,更新查询不起作用

update query not working when i attach the content of text box using data reader on page load

当我删除页面加载内容时代码工作正常。这是一种允许用户编辑数据库中已有数据的表单。我只想让用户编辑他已经提交的表单。 这是代码:

Dim con As New SqlConnection("Data Source=ENCODER-PC\SQLEXPRESS;Integrated Security=True")
Dim cmd, com As New SqlCommand
Dim dr As SqlDataReader
Dim n, d, a As Integer
Dim returnValue As Object
Dim str As String


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load


    str = "select * from School where RollNo=11"
    com = New SqlCommand(str, con)
    dr = com.ExecuteReader()
    con.Open()        
    If (dr.Read()) Then

        Enroll.Text = dr("RollNo").ToString()
        Name.Text = dr("Name").ToString()
        Class.Text = dr("Class").ToString()
    End If
    con.Close()
    dr.Close()

End Sub



Protected Sub Next_Click(sender As Object, e As EventArgs) Handles [Next].Click
    Try
        cmd.CommandText = "Update School SET RollNo='" & Enroll.Text & "', Name='" & Name.Text & "', Class='" & Class.Text & "'  where RollNo=11 "


        cmd.Connection = con


        con.Open()

        MsgBox("Connection is Open ! ")
        n = cmd.ExecuteNonQuery
        If n > 0 Then
            MsgBox("data inserted successfully")
        Else
            MsgBox("data insertion failed")
        End If
    Catch ex As Exception
        MsgBox(ex.ToString())
    Finally
        con.Close()
    End Try
End Sub

您已使用 MySql 标记您的问题,但在代码中您使用 类 作为 Sql 服务器和特定于 Sql 服务器的连接字符串。
所以你应该澄清这一点。但是,与此同时,我希望对您的 Page_Load 事件处理程序中的一些错误做出答复:

首先您需要检查对Page_Load 的调用是否是来自其他控件的回发,并避免在这种情况下从数据库重新加载数据。 See ASP.NET Page Life Cycle
二、在执行reader

之前打开连接
Dim constring  = "Data Source=ENCODER-PC\SQLEXPRESS;Integrated Security=True"

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    Dim str = "select * from School where RollNo=11"

    If Not IsPostBack Then
        Using con = new SqlConnection(conString)
        Using cmd = new SqlCommand(str, con)
            con.Open()
            Using dr = com.ExecuteReader()
                If (dr.Read()) Then
                    Enroll.Text = dr("RollNo").ToString()
                    Name.Text = dr("Name").ToString()
                    Class.Text = dr("Class").ToString()
                End If
            End Using
        End Using
        End Using
    End If

End Sub

如您所见,还有其他改进:连接、命令和一次性对象周围的 reader 和 Using Statement 不再有全局变量。

如果此代码确实旨在 运行 针对 MySql 数据库,那么您需要使用适当的 类,例如 MySqlConnection,MySql命令,MySqlDataReader 等。并修复连接字符串