【问题标题】:Inline update statement replace string with variables内联更新语句用变量替换字符串
【发布时间】:2017-01-26 18:32:21
【问题描述】:

我正在尝试使用更新语句来更新某条记录,但是我遇到了困难。我想用变量值替换“用户”和“时间戳”,但是当我提供内联变量时,我收到一个错误,有人可以帮我实现这个功能。我使用 sql server 作为我的 dbms。

变量:

Dim timeStamp As String = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")

Dim user As String = GetUserName()

更新声明:

strsql = strsql & " Update Activity Set userName = 'user', timeDate = 'timeStamp' Where noteKey = " & lngNoteKey

【问题讨论】:

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


    【解决方案1】:

    您需要使用parameterized queries 来执行此操作。

    strsql = strsql & " Update Activity Set userName = @user, timeDate = @date Where noteKey = " & lngNoteKey
    

    然后在执行的时候给命令加上参数:

    yourQuery.Parameters.Add(new ObjectParameter("user", user));
    yourQuery.Parameters.Add(new ObjectParameter("date", timeStamp));
    

    【讨论】:

    • 查询后要加参数吗?我不确定在哪里添加参数。
    • 老实说,只要在执行查询之前添加参数,我认为在之前或之后添加它们并不重要。为了更容易阅读,我会在之后添加它们。看看我在答案开头引用的链接 - 他们从头到尾介绍了如何使用参数化查询。
    • 我会查看链接。非常感谢。
    【解决方案2】:
    strsql = strsql & " Update Activity Set userName = '" & user & "', timeDate = '" & timeStamp & "' Where noteKey = " & lngNoteKey
    

    试试看。将数据连接到字符串中。

    【讨论】:

    • 怎么样?在这种情况下,他正在提供价值。是的,如果它是用户提供的,你不应该这样做。我更喜欢你的回答。我在 VB / VBA 中处理的 SQL 不多,所以这就是我缺乏知识。我主要处理 PHP,我知道使用数据绑定。
    • 这不是 SQL 注入漏洞,因为输入不是来自用户,但是如果你走这条路,你应该非常小心,不要在用户提供变量时使用它。
    • 是的,你是对的。抱歉 - 我取消了我的反对票并更改了我的评论。
    • 我赞成你的方法,这是一种比拼凑起来的方法更好的学习体验。
    • 谢谢。 +1,我认为在这种情况下两者都可以,因为输入不是用户提供的(假设GetUserName() 没有从用户那里获得输入),但最好让他们养成使用参数化查询的习惯
    猜你喜欢
    • 2019-09-15
    • 2018-02-05
    • 2020-07-09
    • 1970-01-01
    • 2011-09-29
    • 2021-11-29
    • 2013-02-16
    • 2017-01-04
    • 1970-01-01
    相关资源
    最近更新 更多