Как получить выходной параметр LongVarchar из SPROC в ADO.NET 2.0 с помощью SQLAnywhere 10?

У меня есть 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 является «длинным varchar».

Я могу вызвать sproc из iSQL, используя следующий код:

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

- который возвращает правильные значения из БД (поэтому я знаю, что SPROC хорош).

Я настроил параметр out в ADO.NET следующим образом (который до сих пор работал для «целого числа», «отметки времени», «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 раз).

Так что я действительно застрял... Любая помощь в этом вопросе будет очень признательна.

Ваше здоровье! ;)

Тод Т.


person Community    schedule 20.11.2008    source источник


Ответы (2)


Пробовали ли вы не передавать тип данных параметра и позволить ADO.NET разобраться с этим самостоятельно?

person Lurker Indeed    schedule 18.12.2008

Вы пытались установить размер на -1?

Посмотрите на этот ответ.

person Aaron Daniels    schedule 06.08.2010