在mysql workbench中,我可以输入
UPDATE contact_log
SET note = 'test1'
WHERE customer = 'customer'
它将更新客户的备注。 当我在asp.net中尝试这个时,它没有任何效果。
Try
conn.Open()
cmd.Connection = conn
Catch ex As Exception
End Try
cmd.CommandText = "UPDATE contact_log " +
"SET note = '" & TextBox2.Text & "'" +
"WHERE customer = '" & Request.QueryString("ID") & "'"
reader = cmd.ExecuteReader()
conn.Close()
conn.Dispose()
一些事实是连接字符串是正确的,我可以使用select并带回数据没有问题,request.querystring(“ID”)带回客户名称。
有没有更好的方法从asp.net更新mysql表,或者实际有效的方式?
答案 0 :(得分:3)
您的代码中存在许多问题。
总结一下,我会将您的代码更改为此
Dim cmdText = "UPDATE contact_log SET note = @note WHERE customer = @cust"
Using conn = new MySqlConnection(connString)
Using cmd = new MySqlCommand(cmdText, conn)
conn.Open()
cmd.Parameters.AddWithValue("@note",TextBox2.Text)
cmd.Parameters.AddWithValue("@cust",Request.QueryString("ID"))
Dim rowsAffected = cmd.ExecuteNonQuery()
End Using
End Using
参数化查询非常重要,因为您避免Sql Injections并使用包含引号的字符串解析问题(如果TextBox2包含带单引号的文本,则会出现语法错误)
Using Statement将确保youR连接已正确关闭并在出现异常时处理,并避免危险的内存泄漏并降低系统资源的使用
在代码的较高级别可以更好地处理异常,您可以向用户显示消息或在错误日志中写入。捕获异常并且无所事事是非常糟糕的,因为您永远不会知道代码中失败的原因是什么。
答案 1 :(得分:1)
你正在使用错误的命令......你正在写入数据库,而不是从中读取 - 你需要从使用读者改为执行命令....
试试这个:
cmd.CommandText = "UPDATE contact_log " +
"SET note = '" & TextBox2.Text & "'" +
"WHERE customer = '" & Request.QueryString("ID") & "'"
cmd.ExecuteNonQuery()
conn.Close()
conn.Dispose()