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

时间:2010-06-24 16:52:25

标签: sql-server-2008 iis-7 asp-classic vbscript

我正在开发一个经典ASP(VBScript)网站,该网站在 Windows 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("title")都会返回一个空白值。

同样,这似乎只发生在 nvarchar(max)字段中。

任何人都可以了解这种行为以及如何解决这个问题吗?

7 个答案:

答案 0 :(得分:3)

除了'在显示之前将其拉入变量'之外...我依稀记得同事需要使用asp / sql / varchar(max)查询进行一些破解,类似于它必须是最后一列(或者不是最后一列)列中的查询。真的很抱歉模糊不清,自从我不得不与asp打交道已经有几年了。

答案 1 :(得分:2)

如果您查看此链接,http://msdn2.microsoft.com/en-us/library/ms130978.aspx它说启用SQL Server Native Client以获取SQL2005中引入的最新功能,例如varchar(max),所以我想也许使用这个即使您使用的是SQL 2008,也可以为您工作。

答案 2 :(得分:2)

非常老的线索 - 承认。但我遇到了这个问题,这让我开始了INSANE。

我通过改变我的连接字符串来解决这个问题:

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;"

所以,基本上,删除Driver = {SQL Server} 并添加&#34; Provider = SQLNCLI;&#34;,FIXED THIS。

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

希望这有助于某人。

答案 3 :(得分:1)

不确定这是什么原因,但有一点值得注意的是,直到最后一个版本的Classic ASP发布之后,varchar(max)类型才被添加到Sql Server。因此,旧的ado提供商很可能不知道如何处理这些字段。

答案 4 :(得分:1)

我遇到了类似的问题(仅限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

答案 5 :(得分:0)

我做了演员(columName到varchar),它对我有用。

答案 6 :(得分:0)

在Server 2012和2016上使用DSN,此问题仍然存在或浮出水面。

使用DSN通过似乎可以处理varbinary(max)很好但不能处理varchar(max)或nvarchar(max)的立即层发送数据。

这是最糟糕的情况,因为随着时间的流逝,如果您的实际结果超过9K(在我的情况下是400K),则似乎是内存/代码损坏以及服务器错误以及模糊的外部组件错误< / p>