SQL Server varchar(MAX)参数导致“参数对象未正确定义”

时间:2010-10-18 16:45:22

标签: sql-server ms-access varcharmax

我在表中有一个字段,我想存储一个可能很长的错误字符串。为此,我选择了varchar(MAX)作为数据类型。我创建了一个存储过程,用于在表中输入该数据,对于字段“ErrorDescription”,我使用了以下参数定义。

@ErrorDescription as varchar(MAX)

问题出在ADO过程(在Access 2003中)内,该过程调用存储过程来记录错误。我将错误描述作为字符串值并尝试将其分配给参数...

cmd.Parameters("@ErrorDescription").Value = errorDescription

但它失败并出现以下错误。

“参数对象定义不正确”

如果我将存储过程定义更改为...

 @ErrorDescription as varchar(255)

然后一切顺利。如何定义存储过程参数以接受可能非常长的字符串? varchar(MAX)是否使用了错误的数据类型?谢谢。

编辑我应该提到我正在使用的SQL Server版本。我正在使用SQL Server 2008。

3 个答案:

答案 0 :(得分:2)

varchar(MAX)是在SQL Server 2005版本中引入的。我假设您使用的是2000版本。如果是这样,那么您可以使用varchar(8000)Text

答案 1 :(得分:2)

我猜想Access 2003不知道MAX关键字代表什么,因为这是在SQL 2005中引入的。我不确定您是否可以使用TEXT数据来欺骗Access但是,键入并让SQL正确地将其映射到VARCHAR(MAX)列。

答案 2 :(得分:0)

我首先看一下数据库中列的定义以确认数据类型。

SQL_LONGVARCHAR是映射到“备注”字段的服务器类型,我假设它是此数据所需的Access数据类型。如果该假设是正确的,看起来您需要将服务器数据类型更改为SQL_LONGVARCHAR(例如,将列创建为类型'text'而不是'varchar(max)')。