使用IDBCommand进行Db2函数调用

时间:2013-08-27 08:53:46

标签: .net function db2 idbcommand

我无法使用IDBcommand从VB调用函数,该函数返回一个整数值

        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 个答案:

答案 0 :(得分:0)

你创建了一个带有3个参数的函数,但是用4个参数调用一个存储过程 - 难怪它失败了,因为它们是不同的对象而你以不同的方式调用它们。

我对.Net的东西不太熟悉,但一般来说你应该在查询的上下文中调用UDF:

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

VALUES声明

values Func1(?, ?, ?)

在这两种情况下,您都会得到一个结果集,您可以从中获取函数返回的值。查看code samples in the manual