【问题标题】:Insert NULL value into SQL Server from Classic ASP从经典 ASP 将 NULL 值插入 SQL Server
【发布时间】:2021-04-19 07:12:15
【问题描述】:

我正在尝试将 SQL Server 的简单插入或更新为 NULL,而不是空白。我在网上看到很多参考资料只是设置 Field = NULL 不带引号,但它仍然是空的,而不是 NULL。令人难以置信的沮丧。

这是经典的asp。

If Request.Form("Field") = "" or IsNull(Request.Form("Field")) then
    Field = NULL
Else
    Field = Request.Form("Field")
End If

sSql="UPDATE [table] SET timestamp = {fn NOW()}," &_ 
    "Field = '" & Field & "'," &_
    "WHERE [System] = '" & System & "' and Active = '1'"

如果我这样做,它证明它正在检查,因为它输入了一个 1。

If Request.Form("Field") = "" or IsNull(Request.Form("Field")) then
    Field = 1
Else
    Field = Request.Form("Field")
End If

sSql="UPDATE [table] SET timestamp = {fn NOW()}," &_ 
"Field = '" & Field & "'," &_
"WHERE [System] = '" & System & "' and Active = '1'"

我试过了,但收到错误 500:

    sSql="UPDATE [Table] SET timestamp = {fn NOW()}, Field = "
If IsNull(Field) Then
    sSQL = sSQL & "NULL"
Else
    sSQL = sSQL & "'" & Field & "'" &_
End If
"NTLogon = '" & UCase(NTLogon) & "'" &_
"WHERE [System] = '" & System & "' and Active = '1'"

当我尝试这个代替我的原始代码时: 字段分配:

Field = "NULL" and Field = "'" & Request.Form("Field") & "'"

sSQL:

"Field = " & Field & "," &_

我收到“处理 URL 时服务器发生错误。”

【问题讨论】:

  • 在您做任何其他事情之前,您需要阅读、理解并开始使用参数化查询。这是一个教科书式的sql注入示例。
  • 确保您的表没有该列的默认值为空。然后只需设置Field = "NULL" 和Field = "'" & Request.Form("Field") & "'" 并将sql 更改为"Field = " & Field & "," &_ 然后意识到您应该使用参数化查询并再次改变它

标签: sql-server asp-classic


【解决方案1】:

所以,是的,在这里插入关于使用参数化查询的咆哮,等等等等……现在这超出了每个人的系统,我们可以看看实际的问题吗?

问题是这样的:

"Field = '" & Field & "'"

这些 & 符号正在将您精心填充的 vbScript NULL 值转换回字符串。如果您不希望这种情况发生,则需要显式处理 IsNull 情况。

sSQL = "UPDATE [table] SET timestamp = {fn NOW()}, Field = "
If IsNull(Field) Then
    sSQL = sSQL & "NULL"
Else
    sSQL = sSQL & "'" & Field & "'"
End If
sSQL = sSQL & " WHERE [System] = '" & System & "' AND Active = '1'"

请注意,即使您通过参数化查询执行此操作,您也需要确保没有将您的 vbScript NULL 值附加到字符串上,因为 "" & NULL = ""。

【讨论】:

    【解决方案2】:

    @pinchetpooche 你好。我遇到了同样的问题并尝试了给定的答案,并且还收到了 500 错误页面。我发现@Martha 忘记包含正在更新的必要 SQL 字段(即“字段”)。所以我整理了一些测试代码,使用她的解决方案(即使用字符串连接和条件逻辑),并针对实际数据库执行,这个解决方案完美运行:

    sSQLNullTest = "UPDATE CustomersToCCData SET " 
    sSQLNullTest = sSQLNullTest & "CustomerID = " & iCustomerID & ", "
                        
       If IsNull(x_license_number_state) Or x_license_number_state = "" Then
    
         sSQLNullTest = sSQLNullTest & "CCLicenseState = NULL"
    
       Else
       
         sSQLNullTest = sSQLNullTest & "CCLicenseState = '" & x_license_number_state & "' "
       
       End If
                        
    sSQLNullTest = sSQLNullTest & " WHERE CCID = '" & iCCInfoCCID & "'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多