【问题标题】:Updating SQL database using VB.net使用 VB.net 更新 SQL 数据库
【发布时间】:2016-10-05 09:18:25
【问题描述】:

我尝试使用 VB.NET 在 ASP 中更新 MS SQL 中的数据库。这是我的代码。没有错误但是数据库中的数据没有更新

Dim cnConnect As New SqlConnection
    cnConnect.ConnectionString = conn.ConnectionString
    cnConnect.Open()
    Dim cm As New SqlCommand
    cm.CommandText = "UPDATE book SET name = '" & name.Text & "'
    WHERE idnum = '" & idno.Text & "';"
    cm.Connection = cnConnect
    cnConnect.Close()

【问题讨论】:

  • 需要执行命令才能产生任何结果。您的代码缺少关键行:cm.ExecuteNonQuery
  • 顺便说一句,你已经有了这个名为 conn 的现有连接 - 你可能已经将它用作附加到命令的连接,而不需要建立新连接。

标签: asp.net sql-server vb.net


【解决方案1】:

需要执行命令才能产生任何结果。
您需要调用 cm.ExecuteNonQuery。
但是您的代码还有其他问题。
最危险的一种是值的字符串连接以形成 Sql 语句。这是一个well known problem,允许黑客弄乱(或简单地破坏)您的数据库。
除了黑客攻击之外,您的 name 文本框(如 McDonald's)中的简单引用也会因语法错误而破坏您的代码。 (试试看)
只有一种解决方案,它是:使用参数

Dim sqlText = "UPDATE book SET name = @name WHERE idnum = @num"
Using cnConnect = New SqlConnection(conn.ConnectionString)
Using cm = new SqlCommand(sqlText, cnConnect)
   cnConnect.Open()
   cm.Parameters.Add("@name", SqlDbType.NVarChar).Value = name.Text
   cm.Parameters.Add("@num", SqlDbType.NVarChar).Value = idno.Text 
   cm.ExecuteNonQuery()
End Using
End Using

还要注意使用的 Disposable 对象是如何包含在 Using 块中的,以允许在 Using 块关闭时自动销毁这些对象使用的资源

【讨论】:

    【解决方案2】:

    我认为您错过了执行查询。您可能必须在像这样关闭连接之前执行查询,

    cm.ExecuteNonQuery()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-17
      • 1970-01-01
      • 1970-01-01
      • 2020-07-16
      • 2011-09-03
      • 1970-01-01
      • 2014-09-18
      相关资源
      最近更新 更多