如何在c#中调用包中的oracle函数

时间:2015-03-26 11:55:10

标签: c# oracle

这是我的pl sql代码(包含函数的包):

CREATE OR REPLACE 
PACKAGE PACKAGE_REQUETE
IS
FUNCTION REQUETEFONCTION (ParametreId       requete.id%TYPE ) RETURN number;
END PACKAGE_REQUETE;
/
CREATE PACKAGE BODY  PACKAGE_REQUETE
IS
FUNCTION REQUETEFONCTION (ParametreId          requete.id%TYPE )
RETURN number IS
VariableId requete.id%TYPE ;
BEGIN
SELECT   id INTO   VariableId FROM   requete WHERE   id = ParametreId;
RETURN VariableId;
EXCEPTION WHEN OTHERS
THEN
    RETURN (-1);
END REQUETEFONCTION;
END PACKAGE_REQUETE;
/

我尝试使用ExecuteScalarExecuteNonQuery从Windows窗体应用程序调用它而没有运气。

请在下面找到C#代码:

private void button3_Click_1(object sender, EventArgs e)
    {
        OracleConnection conn = new OracleConnection(Authentification.chaineConnection);    
        OracleCommand cmd = new OracleCommand("PACKAGE_REQUETE.REQUETEFONCTION(1)", conn);
        cmd.Connection = conn;

        conn.Open();
        cmd.CommandType = CommandType.StoredProcedure;
        textBox1.Text = cmd.ExecuteScalar().ToString();
    }

你能否帮我找一下导致错误的原因。

1 个答案:

答案 0 :(得分:0)

有两件事情可能会出现:

1)检查并确保软件包处于已编译状态,并确保您以同一用户身份进行连接。如果不是同一个用户,则需要向该用户授予执行权,并为该包创建同义词或在函数调用中包含用户名。

2)你的初始代码似乎是把它称为过程而不是函数,因为我没有看到返回参数的存储位置,但我不是C#的人,因此可能是偏离基础的。

这里有一个有效的例子:executing function with C# and ODP.net