Вызов функции Db2 с IDBCommand

У меня проблемы с вызовом функции из VB с IDBcommand, которая возвращает целочисленное значение

        param1 = dbfactory.CreateParameter("param1", DbType.AnsiString)
        param1.Value = sIban
        param1.Direction = ParameterDirection.Input
        param1.Size = 1000
        param2 = dbfactory.CreateParameter("param2", DbType.AnsiString)
        param2.Value = sNid
        param2.Direction = ParameterDirection.InputOutput
        param2.Size = 1000
        param3 = ´dbfactory.CreateParameter("param3", DbType.AnsiString)
        param3.Value = sKto
        param3.Direction = ParameterDirection.InputOutput
        param3.Size = 1000
        ret_value = dbfactory.CreateParameter(Nothing, DbType.Int16)
        ret_value.Size = 1000
        ret_value.Direction = ParameterDirection.ReturnValue
        cmd.CommandText = "Func1"
        cmd.CommandType = CommandType.StoredProcedure
        cmd.Parameters.Add(param1)
        cmd.Parameters.Add(param2)
        cmd.Parameters.Add(param3)
        cmd.Parameters.Add(ret_value)
        cmd.Connection = conn
        cmd.ExecuteNonQuery()

Заголовок из моей функции выглядит так:

CREATE OR REPLACE FUNCTION Func1( param1 VARCHAR(50), param2 VARCHAR(50), param 3 VARCHAR(50))RETURNS INTEGER

Я получаю исключение, что никакая процедура не может быть найдена.

У кого-нибудь есть идеи? Я искал некоторое время сейчас.

Спасибо

1 ответ

Вы создаете функцию с 3 параметрами, но вызываете хранимую процедуру с 4 параметрами - неудивительно, что она не работает, так как это разные объекты, и вы вызываете их по-разному.

Я не очень знаком с вещами.Net, но, вообще говоря, вы должны вызывать UDF в контексте запроса:

select Func1(?, ?, ?) from sysibm.sysdummy1

или VALUES заявление

values Func1(?, ?, ?)

В обоих случаях вы получаете набор результатов, из которого вы можете получить значение, возвращаемое функцией. Проверьте примеры кода в руководстве.

Другие вопросы по тегам