【问题标题】:SQL Server timestamp error 800a01f4SQL Server 时间戳错误 800a01f4
【发布时间】:2012-04-21 06:09:22
【问题描述】:

这是我正在尝试的:

sSQL = "INSERT into users (firstName, lastName, email, password, zip, country, company, industry, revenue, timestamp) 
        VALUES('" & fname & "','" & lName & "','" & email & "','" & password & "','" & zip & "','" & country & "','" & company & "','" & industry & "','" & revenue & "','" & CURRENT_TIMESTAMP & "')" 

错误信息:

Microsoft VBScript 运行时错误“800a01f4” 变量未定义:'CURRENT_TIMESTAMP' /register.asp,第 24 行

我尝试将 DEFAULT 作为时间戳,但没有用。

【问题讨论】:

  • 这将产生SQL Injection非常容易破解的代码
  • 你为什么这么认为?我该如何解决?提前致谢!
  • 如果我设置 firstName = ") Values('blah') GO DELETE * FROM users GO --"。我刚刚删除了您表中的所有用户。这是微软关于如何防止Sql Injection 的一个小花絮。
  • 非常感谢!会通过的!
  • 看看this StackOverflow 问题。大量关于 SQL 注入的信息。

标签: sql asp-classic


【解决方案1】:

这样做

... revenue & "', CURRENT_TIMESTAMP)"

CURRENT_TIMESTAMP 应该是您的 sql 查询的一部分。它不是您代码中的变量。

编辑:要使其正常工作,您应该将 timestamp 列的数据类型更改为 datetime

【讨论】:

  • 我试过了,但它给了我以下错误:Microsoft OLE DB Provider for SQL Server 错误 '80040e2f' 无法将显式值插入时间戳列。将 INSERT 与列列表一起使用以排除时间戳列,或将 DEFAULT 插入时间戳列。 /register.asp,第 37 行所以我用 DEFAULT 替换了 CURRENT_TIMESTAMP,它起作用了。但是当我检查数据库时,值是这样的:0x0000007D5 如何获得可读的时间戳?
  • 你用的是什么数据库引擎?
  • 试试getdate() 这是一个内置函数,它返回当前的日期时间。
  • @rdesai:查看我的更新。您需要将时间戳列的数据类型更改为日期时间。
【解决方案2】:

根据您对其他答案之一的 cmets,您的基本问题是尝试插入时间戳列。时间戳列不能插入或更新时间戳实际上不是日期或时间值,而是由数据库引擎处理的行版本列。您可以与它进行比较以避免并发问题。

把它从你的列列表中去掉,它应该可以工作。

也就是说,您应该使用 sql 参数,而不是字符串连接来创建您的 sql 命令。

【讨论】:

  • 这真的应该是一个评论,因为它不会试图回答这个问题。不过好点。
  • @JohnFx:它确实回答了这个问题,但基于他对另一个答案的评论。我扩展了我的答案以使其更清楚:它不起作用,因为你不能这样做。
【解决方案3】:

尝试改用 Timestamp = [TimeStamp],使用此字段名称时可能会遇到问题。

【讨论】:

    猜你喜欢
    • 2017-05-29
    • 2016-10-16
    • 2017-08-29
    • 1970-01-01
    • 2011-05-27
    • 2014-07-05
    • 2011-06-03
    • 2011-04-23
    • 1970-01-01
    相关资源
    最近更新 更多