gpt4 book ai didi

asp-classic - 从截断为 4000 个字符的存储过程返回 varchar(max) 输出参数

转载 作者:行者123 更新时间:2023-12-02 00:00:32 25 4
gpt4 key购买 nike

我有一个带有 SQL2012 数据库的经典 ASP 应用程序。我最近将一个表列从 varchar(8000) 更改为 varchar(max),因为它不够大,无法存储所需的数据。

我可以用我需要存储的所有数据更新列,但是我用来将列数据作为输出参数返回的 SP 只返回 4000 个字符(至少这是以下代码的结果)给我:

Len(cmd.Parameters("@detail").Value)

我使用以下参数声明作为调用 SP 的一部分:

cmd.Parameters.Append cmd.CreateParameter("@detail", 8, 2,  -1, strDetail)

8 是 adBStr 的值。我尝试将 8 更改为 200、201 和 203,但这会出现以下错误:

Error: 800a0e7c

Description:
Parameter object is improperly defined. Inconsistent or incomplete information was provided.

我原以为更新数据会很困难,但我不知道如何检索该列的全部内容。

我正在返回列的 DATALENGTH,它说它的长度为 10,536,但我只得到 4,000 个字符,包括通过输出参数返回的空格。我可以看到来自 Visual Studio 的所有数据(10k 个字符),所以我知道它在那里。

我的连接字符串 Provider=SQLOLEDB.1。这可能是个问题吗?我应该使用更新的 SQL Server Native Client 11.0 OLE DB Provider - SQLNCLI11 吗??

有人有什么想法吗?

干杯,迈克。

最佳答案

您对连接字符串的假设是正确的

您需要使用 SQL Server Native Client 而不是 SQLOLEDB.1 来支持 VARCHAR(MAX)NVARCHAR(MAX) 数据类型,否则它们将截断回那里的 SQLOLEDB 等价物。

然后您想要使用以下参数定义

'For varchar(max) OUTPUT use;
Call cmd.Parameters.Append(cmd.CreateParameter("@detail", adLongVarChar, adParamOutput, -1, strDetail))

'For nvarchar(max) OUTPUT use;
Call cmd.Parameters.Append(cmd.CreateParameter("@detail", adLongVarWChar, adParamOutput, -1, strDetail))

'** Constants **
' adLongVarChar = 201
' adLongVarWChar = 203
' adParamOutput = 2

关于asp-classic - 从截断为 4000 个字符的存储过程返回 varchar(max) 输出参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21667805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com