Вызов функции 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(?, ?, ?)
В обоих случаях вы получаете набор результатов, из которого вы можете получить значение, возвращаемое функцией. Проверьте примеры кода в руководстве.