Как я могу получить параметр LongVarchar из SPROC в ADO.NET 2.0 с SQLAnywhere 10? - PullRequest
1 голос
/ 20 ноября 2008

У меня есть 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 следующим образом (который до сих пор работал для 'integer', 'timestamp', '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 раз).

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

Ура! ;)

Тод Т.

Ответы [ 2 ]

0 голосов
/ 06 августа 2010

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

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

0 голосов
/ 18 декабря 2008

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

...