【问题标题】:SQL update query VB ASPSQL 更新查询 VB ASP
【发布时间】:2014-04-03 18:30:00
【问题描述】:

我正在尝试通过 VB 和 ASP.net 在 SQL Server 数据库中进行更新查询

下面的这段代码会更新所有具有相同值的记录。我希望它只更新一条记录,具体取决于“电子邮件”会话变量。

Dim cmdstring As String = "UPDATE [Customer] SET card_type=@CARDTYPE"

    Email = Session("email")
    ', Card_Number, Expiry_Date, Security_Number, Name_On_Card) Values (@CARDTYPE, @CARDNUMBER, @EXPIRYDATE, @SECURITYNUMBER, @NAMEONCARD)"

    conn = New SqlConnection("data source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\UniversityClothing.mdf;Integrated Security=True;User Instance=True")
    cmd = New SqlCommand(cmdstring, conn)

    cmd.Parameters.AddWithValue("@CARDTYPE", cardtype)
    cmd.Parameters.AddWithValue("@CARDNUMBER", cardnumber)
    cmd.Parameters.AddWithValue("@EXPIRYDATE", expirydate)
    cmd.Parameters.AddWithValue("@SECURITYNUMBER", securitynumber)
    cmd.Parameters.AddWithValue("@NAMEONCARD", nameoncard)

    conn.Open()

    cmd.ExecuteNonQuery()

    conn.Close()

【问题讨论】:

  • 客户有邮箱吗?如果是这样,请添加 WHERE 语句。
  • 是的,但是 WHERE 语句不起作用,真是个新手!
  • 你的意思是不会工作?您收到错误消息吗?如果是这样,它是什么?您尝试过的陈述是什么?
  • Dim cmdstring As String = "UPDATE [Customer] SET card_type=@CARDTYPE WHERE email=?"
  • 那么你的参数在哪里?另外,最好不要混搭。 WHERE email=@Email

标签: asp.net sql vb.net


【解决方案1】:

这样做:

Using conn As New SqlConnection("data source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\UniversityClothing.mdf;Integrated Security=True;User Instance=True"), _
      cmd As New SqlCommand("UPDATE [Customer] SET card_type=@CARDTYPE WHERE email = @Email", conn)

    cmd.Parameters.AddWithValue("@CARDTYPE", cardtype)
    cmd.Parameters.AddWithValue("@Email", Session("email"))

    conn.Open()
    cmd.ExecuteNonQuery()
End Using

另外请注意,我真的不喜欢 AddWithValue() 方法。这可能会导致严重的性能问题。

【讨论】:

    【解决方案2】:

    您需要添加一个 WHERE 子句。示例:

    Dim cmdstring As String = "UPDATE [Customer] SET card_type=@CARDTYPE, Card_Number=@CARDNUMBER, Expiry_Date=@EXPIRYDATE, Security_Number=@SECURITYNUMBER, Name_On_Card=@NAMEONCARD WHERE Email=@EMAIL)"
    Email = Session("email")
    
    conn = New SqlConnection("data source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\UniversityClothing.mdf;Integrated Security=True;User Instance=True")
    cmd = New SqlCommand(cmdstring, conn)
    cmd.Parameters.AddWithValue("@CARDTYPE", cardtype)
    cmd.Parameters.AddWithValue("@CARDNUMBER", cardnumber)
    cmd.Parameters.AddWithValue("@EXPIRYDATE", expirydate)
    cmd.Parameters.AddWithValue("@SECURITYNUMBER", securitynumber)
    cmd.Parameters.AddWithValue("@NAMEONCARD", nameoncard)
    cmd.Parameters.AddWithValue("@EMAIL", Email)
    
    conn.Open()
    
    cmd.ExecuteNonQuery()
    
    conn.Close()
    

    注意以下几点:

    1. 根据 PCI 规定,您不应该存储安全号码,并且应该 对您的卡号进行适当的加密
    2. 我假设您已验证所有字段以防止 SQL 注入

    【讨论】:

    • ')' 附近的语法不正确。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。异常详细信息:System.Data.SqlClient.SqlException:')' 附近的语法不正确。源错误:第 479 行:conn.Open() 第 480 行:第 481 行:cmd.ExecuteNonQuery() 第 482 行:第 483 行:conn.Close()
    • 这是我收到您的代码建议后收到的错误消息,有什么想法吗?
    • 去掉 cmdstring 末尾的 ')'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    相关资源
    最近更新 更多