2010-10-18 123 views
0

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

@ErrorDescription as varchar(MAX) 

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

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

但它失败,并显示以下错误。

“Parameter对象未正确定义”

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

@ErrorDescription as varchar(255) 

然后一切运作良好。我如何定义存储过程参数来接受可能很长的字符串? varchar(MAX)是否使用错误的数据类型?谢谢。

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

+3

什么版本的sql server? – JNK 2010-10-18 16:47:16

+0

是否可以使用varchar(max)字段作为参数?我不知道这个... – 2010-10-18 18:37:29

+0

@Phillipe - 它在2005+ – JNK 2010-10-18 18:43:53

回答

2

varchar(MAX)与SQL Server版本2005一起引入。我假定您使用的是2000版本。如果是这样,那么你可以枯萎使用varchar(8000)Text

+0

我结束了将存储过程中的参数设置为varchar(8000),并且都运行良好。 – webworm 2010-10-19 17:40:35

0

我会首先看看数据库中列的定义来确认数据类型。

SQL_LONGVARCHAR是映射到Memo字段的服务器类型,我假定它是您希望用于此数据的Access数据类型。如果这种假设是正确的,看起来您需要将服务器数据类型更改为SQL_LONGVARCHAR(例如,将该列创建为类型'text'而不是'varchar(max)')。

2

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

+0

访问与它没有任何关系。 VarChar()根本不是Access,除了传递查询外,不能使用。如果这是上下文,那么所有的工作都是可行的,因为直通的一个重点是Access/Jet/ACE不会触及它并直接发送到服务器进行处理。 – 2010-10-19 01:25:28