代码之家  ›  专栏  ›  技术社区  ›  Mark Biek

nvarchar(max)字段和经典ASP的奇怪问题

  •  1
  • Mark Biek  · 技术社区  · 14 年前

    我正在一个运行在 视窗2008 服务器与 iIS7 击中一个 SQL Server 2008 数据库和我看到一些奇怪的行为,似乎是特定于类型的字段 NVARCHAR(MAX) .

    我有一段简单的代码,它循环一些查询结果,并尝试将标题字段打印两次。

    rs.open "SELECT * FROM thing", dbConnection
    
    do while not rs.eof
        response.write "(" & rs("title") & ")" & "(" & rs("title") & ")" & "<br />"
        rs.movenext
    loop
    

    我第一次使用 rs("title") ,我得到值。在第一次循环之后的任何时候, RS(“标题”) 返回一个空值。

    同样,这似乎只发生在 NVARCHAR(MAX) 领域。

    有人能解释一下这种行为以及如何避开它吗?

    6 回复  |  直到 7 年前
        1
  •  2
  •   Bmw    14 年前

    如果你看一下这个链接, http://msdn2.microsoft.com/en-us/library/ms130978.aspx 它说,为了使SQL Server本机客户端能够获得最新的功能,比如在SQL2005中引入的varchar(max),所以我认为即使您使用的是SQL 2008,也可以使用它。

        2
  •  3
  •   donjay    14 年前

    除了“在显示前将其拉入变量”…我隐约记得同事需要对asp/sql/varchar(max)查询进行一些黑客攻击,比如它必须是查询中的最后一列(或者不是最后一列)。真的很抱歉这么含糊,我已经有几年没有和ASP打交道了。

        3
  •  2
  •   Carl Hine    7 年前

    很旧的线-允许。但我有这个问题,这让我发疯了。

    我通过如下方式更改连接字符串来修复此问题:

    objConn.Open "Driver={SQL Server}; Server=(local); Database=<what-your-database-is-called>; Uid=sa;Pwd=sa;"
    

    到:

    objConn.Open "Provider=SQLNCLI; Server=(local); Database=<what-your-database-is-called> ; Uid=sa;Pwd=sa;"
    

    因此,实际上,删除驱动程序=SQL Server 并添加了“provider=sqlncli;”,修复了这个问题。

    我现在可以看到nvarchar(max)列在我的经典ASP页面中正确显示。

    希望这能帮助别人。

        4
  •  1
  •   Joel Coehoorn    14 年前

    不确定这是原因,但值得注意的是 varchar(max) 直到最后一个经典ASP版本发布后不久,才将类型添加到SQL Server。因此,很可能老的ADO提供者不知道如何处理这些字段。

        5
  •  1
  •   Christian Specht Anand    14 年前

    我刚刚遇到了类似的问题(仅限于SQL Server 2005,而不是2008):

    If Not IsNull(rs("Title")) Then
        Response.Write "The title: " & rs("Title") 
    End If
    

    已执行response.write,但未显示标题本身。

    我花了很长时间才发现ASP Classic和nvarchar(max)的组合导致了这个问题。
    然后我发现 this 我把代码改成了:

    SomeVariable = rs("Title")    
    If Not IsNull(SomeVariable) Then
        Response.Write "The title: " & SomeVariable 
    End If
    
        6
  •  0
  •   Rick Bryan    8 年前

    我做了演员表(专栏名为varchar),它为我工作。