这是我的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;
/
我尝试使用ExecuteScalar
和ExecuteNonQuery
从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();
}
你能否帮我找一下导致错误的原因。
答案 0 :(得分:0)
有两件事情可能会出现:
1)检查并确保软件包处于已编译状态,并确保您以同一用户身份进行连接。如果不是同一个用户,则需要向该用户授予执行权,并为该包创建同义词或在函数调用中包含用户名。
2)你的初始代码似乎是把它称为过程而不是函数,因为我没有看到返回参数的存储位置,但我不是C#的人,因此可能是偏离基础的。
这里有一个有效的例子:executing function with C# and ODP.net