如何从asp.net更新mysql表中的条目?

时间:2013-07-15 19:23:29

标签: asp.net mysql vb.net

在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表,或者实际有效的方式?

2 个答案:

答案 0 :(得分:3)

您的代码中存在许多问题。

  • 不要使用字符串连接来构建sql命令,但是 参数化查询
  • 不要抓住异常并吞下它们
  • 使用适当的using语句关闭并处置 连接
  • 当然INSERT / UPDATE / DELETE语句需要ExecuteNonQuery

总结一下,我会将您的代码更改为此

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()