更新。帮帮我,我做错了吗?
update. Help me, am I doing it wrong?
这里是一个代码,用于更新与学生输入的学生 ID 相对应的费用列中的数据。代码没有错误,但程序似乎没有更新数据库中的值。
Private Sub dbupdate()
'Create a connection object.
myConnectionString = "server=localhost;" _
& "uid=root;" _
& "pwd=password;" _
& "database=dummystudents"
Try
'open the connection
Dim conn As New MySql.Data.MySqlClient.MySqlConnection(myConnectionString)
conn.Open()
'create a command object.
sql = "UPDATE students SET fees = '" & txtBalance.Text & "'WHERE idstudents = '" & txtStudentID.Text
command = New MySqlCommand(sql, conn)
command.ExecuteNonQuery()
'Close connection
conn.Close()
Catch ex As Exception
End Try
End Sub
您在使用调试器吗?我的意思是 真的使用 调试器?在构建 sql 并检查实际的 sql 之后放置一个断点。它看起来正确吗?
UPDATE students SET fees = 'txtBalanceText'WHERE idstudents = 'txtStudentIDText
您可能会注意到它在学生 ID 后缺少一个结束单引号。另外,我想知道您的数据库中的 fees
和 idstudents
是什么类型。如果它们是数字,它们应该是,那么您根本不使用单引号。如果它们是文本,那么您确实需要引号。修复引号。您可以像这样添加另一个单引号
sql = "UPDATE students SET fees = '" & txtBalance.Text & "' WHERE idstudents = '" & txtStudentID.Text & "'"
以上代码只会修复缺少的引号。
但是,you should parameterize your queries,并不仅仅是直接使用文本框。您的代码容易出现 sql 注入,您应该认真对待。从本质上讲,这段代码很容易受到将自己的子查询放入文本框的人的攻击,就像这样
以下是改进代码的方法。其一,使用 Using
块来创建和处理连接和命令。这些对象可能在幕后有非托管内存,您应该始终调用 obj.Dispose()
或让 Using
块自动处理它。此外,此示例添加了您的参数,有效避免了上述 sql 注入风险
Dim myConnectionString = "server=localhost;" &
"uid=root;" &
"pwd=password;" &
"database=dummystudents"
Using conn As New MySqlConnection(myConnectionString)
conn.Open()
Dim sql = "UPDATE students SET fees = @fees WHERE idstudents = @studentID"
Using com As New MySqlCommand(sql, conn)
com.Parameters.AddWithValue("@fees", txtBalance.Text)
com.Parameters.AddWithValue("@studentID", txtStudentID.Text)
com.ExecuteNonQuery()
End Using
End Using
根据字段类型,添加参数将包含或排除单引号,因此您无需再担心 - 一个额外的好处。
这里是一个代码,用于更新与学生输入的学生 ID 相对应的费用列中的数据。代码没有错误,但程序似乎没有更新数据库中的值。
Private Sub dbupdate()
'Create a connection object.
myConnectionString = "server=localhost;" _
& "uid=root;" _
& "pwd=password;" _
& "database=dummystudents"
Try
'open the connection
Dim conn As New MySql.Data.MySqlClient.MySqlConnection(myConnectionString)
conn.Open()
'create a command object.
sql = "UPDATE students SET fees = '" & txtBalance.Text & "'WHERE idstudents = '" & txtStudentID.Text
command = New MySqlCommand(sql, conn)
command.ExecuteNonQuery()
'Close connection
conn.Close()
Catch ex As Exception
End Try
End Sub
您在使用调试器吗?我的意思是 真的使用 调试器?在构建 sql 并检查实际的 sql 之后放置一个断点。它看起来正确吗?
UPDATE students SET fees = 'txtBalanceText'WHERE idstudents = 'txtStudentIDText
您可能会注意到它在学生 ID 后缺少一个结束单引号。另外,我想知道您的数据库中的 fees
和 idstudents
是什么类型。如果它们是数字,它们应该是,那么您根本不使用单引号。如果它们是文本,那么您确实需要引号。修复引号。您可以像这样添加另一个单引号
sql = "UPDATE students SET fees = '" & txtBalance.Text & "' WHERE idstudents = '" & txtStudentID.Text & "'"
以上代码只会修复缺少的引号。
但是,you should parameterize your queries,并不仅仅是直接使用文本框。您的代码容易出现 sql 注入,您应该认真对待。从本质上讲,这段代码很容易受到将自己的子查询放入文本框的人的攻击,就像这样
以下是改进代码的方法。其一,使用 Using
块来创建和处理连接和命令。这些对象可能在幕后有非托管内存,您应该始终调用 obj.Dispose()
或让 Using
块自动处理它。此外,此示例添加了您的参数,有效避免了上述 sql 注入风险
Dim myConnectionString = "server=localhost;" &
"uid=root;" &
"pwd=password;" &
"database=dummystudents"
Using conn As New MySqlConnection(myConnectionString)
conn.Open()
Dim sql = "UPDATE students SET fees = @fees WHERE idstudents = @studentID"
Using com As New MySqlCommand(sql, conn)
com.Parameters.AddWithValue("@fees", txtBalance.Text)
com.Parameters.AddWithValue("@studentID", txtStudentID.Text)
com.ExecuteNonQuery()
End Using
End Using
根据字段类型,添加参数将包含或排除单引号,因此您无需再担心 - 一个额外的好处。