当我在页面加载时使用数据 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 等。并修复连接字符串
当我删除页面加载内容时代码工作正常。这是一种允许用户编辑数据库中已有数据的表单。我只想让用户编辑他已经提交的表单。 这是代码:
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 等。并修复连接字符串