经典 ASP ADODB 结果已损坏

Classic ASP ADODB results corrupted

我正在将经典 ASP 应用程序迁移到较新的 SQL Server 数据库服务器。

新服务器是 Windows 2019 服务器(版本 10.0.17763)。我有一个 ADODB 连接(版本 10.0)到 SQL Server 2019 数据库(数据库是从旧版本迁移而来)。

似乎应用程序 运行s 几乎 完美,但在数十个工作正常的 ADODB 查询中有一个 returns 损坏了数据。

更新:事实证明,唯一受影响的列确实是 nvarchar(max) 列。因此,这是一个 duplicate of this question。我的原始问题的详细信息如下:

如果我运行存储过程在SQL Management Studio中,结果是完美的:

SELECT  dbo.[Staff.Reports].[Report Title], replace(dbo.[Staff.Reports].[Description],char(34),'') as RepDesc
FROM    dbo.[Staff.Reports] LEFT OUTER JOIN dbo.[Staff.Reports Permissions] ON dbo.[Staff.Reports].[Report ID] = dbo.[Staff.Reports Permissions].[Report ID]
WHERE   dbo.[Staff.Reports Permissions].[Staff ID] = @StaffID

Returns:

Report Title RepDesc
Achievements Admin Update OAA, and other Achievements
AdRef By Engineers AdRef By Engineers
Adref Status Count Ad Campaign report by ref no.

等等

但是,当相同的查询是 运行 通过经典 ASP 代码时,使用 ADODB 连接,返回的数据已损坏:

Report Title RepDesc
Achievements Admin ] 0
AdRef By Engineers
Adref Status Count 0

出于兴趣,描述栏是 nvarchar(max) 类型。我通过将其记录到文本输出文件来确定输出内容 - 这不是数据显示的问题。

输出相同数量的字符,但它们主要是空字符和控制字符。

我已尝试删除并重新创建查询,但对发生的情况一头雾水。

有人能帮忙吗?

感谢您的关注,AlwaysLearning。所有查询都是 运行 使用相同的 'GetRecordset' 函数,基本上是:

Set oConnection = CreateObject("ADODB.Connection")
oConnection.Open "Data Source=TheDatabase;UID=Fred;Password=" & strPassword
oConnection.CursorLocation = 3
Set CreateConnection = oConnection

Set objComm = Server.CreateObject("ADODB.Command")
objComm.ActiveConnection = CreateConnection
objComm.CommandType = adCmdStoredProc
objComm.CommandText = cQuery
objComm.CommandTimeout = 1800

For iThisParameter = 1 to UBound(aParameters)
    Set objParam = objComm.CreateParameter("@par" & iThisParameter, adVarChar, adParamInput, 1024)
    objComm.Parameters.Append objParam
    objComm.Parameters("@par" & iThisParameter) = aParameters(iThisParameter)
Next
Set GetRecordset = objComm.Execute

您应该使用支持 ADO 的现代驱动程序连接到 SQL 服务器。

Using ADO with OLE DB Driver for SQL Server