如何使用SQLAnywhere 10在ADO.NET 2.0中从SPROC获取LongVarchar param?

时间:2008-11-20 04:58:50

标签: c# stored-procedures ado.net sqlanywhere

我有sproc'up_selfassessform_view',其中包含以下参数:

in ai_eqidentkey SYSKEY
in ai_acidentkey SYSKEY
out as_eqcomments TEXT_STRING
out as_acexplanation TEXT_STRING

- 这是域对象 - SYSKEY是'整数'而TEXT_STRING是'long varchar'。

我可以使用以下代码从iSQL调用sproc:

create variable @eqcomments TEXT_STRING;
create variable @acexamples TEXT_STRING;
call up_selfassessform_view (75000146, 3, @eqcomments, @acexamples);
select @eqcomments, @acexamples;

- 从DB返回正确的值(所以我知道SPROC是好的)。

我已经在ADO.NET中配置了out参数(直到现在为'整数','时间戳','varchar(255)'等):

SAParameter as_acexplanation   = cmd.CreateParameter();

as_acexplanation.Direction     = ParameterDirection.Output;
as_acexplanation.ParameterName = "as_acexplanation";
as_acexplanation.SADbType      = SADbType.LongVarchar;

cmd.Parameters.Add(as_acexplanation);

当我运行以下代码时:

SADataReader reader = cmd.ExecuteReader();

我收到以下错误:

Parameter[2]: the Size property has an invalid size of 0.

哪(我猜)有道理......

但事实是,我不知道该字段的大小(它只是“长varchar”它没有预定的长度 - 不像varchar(XXX))。

无论如何,只是为了好玩,我添加以下内容:

as_acexplanation.Size = 1000;

并且上面的错误消失了,但是现在我打电话的时候:

as_acexplanation.Value

我得到一个长度= 1000的字符串,它只是'\ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 .. 。'(\ 0重复1000次)。

所以我真的被困了......任何帮助都会非常感激。

干杯! ;)

Tod T。

2 个答案:

答案 0 :(得分:0)

您是否尝试过不传递参数数据类型并让ADO.NET自行解决?

答案 1 :(得分:0)

您是否尝试将尺寸设为-1?

请看this回答。