gpt4 book ai didi

c# - ASP.NET 和 Oracle 存储过程错误

转载 作者:太空宇宙 更新时间:2023-11-03 16:39:08 26 4
gpt4 key购买 nike

我对存储过程和 .NET 很陌生,所以提前致歉。我有一个正在尝试使用的存储过程,但我不断收到此错误...“调用‘COPY_ACCOUNT’时参数的数量或类型错误”。我不确定为什么。下面是我的存储过程代码,后面是我的 C#.NET 代码。任何帮助是极大的赞赏。请。

create or replace procedure abstract_names.copy_account(r_rows_copied out int,
ar_old_acct in abn_headings.acct_no%type,
ar_new_acct in abn_headings.acct_no%type)
is
cnt int := 0;
begin
r_rows_copied := 0;
for r in (select heading from abn_headings where acct_no = ar_old_acct) loop
copy_heading(cnt, ar_old_acct, r.heading, ar_new_acct);
r_rows_copied := r_rows_copied + cnt;
end loop;
dbms_output.put_line('called abstract_names.copy_account '||to_char(r_rows_copied));
return; end;

然后我的 C#.NET 代码...

using System.Data.OracleClient;
try
{
conn.Open();
OracleCommand cmd = new OracleCommand();

cmd.Parameters.Add("r_rows_copied", OracleType.Int32).Direction = ParameterDirection.Output;
cmd.Parameters.Add("ar_from_acct", OracleType.VarChar).Value = accountNumberDropDownList.SelectedValue.ToString();
cmd.Parameters.Add("ar_to_acct", OracleType.VarChar).Value = copyAccountDDL.SelectedValue.ToString();
cmd = new OracleCommand("abstract_names.copy_account", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.ExecuteNonQuery();
conn.Close();
/*
abstract_names.copy_account(r_rows_copied out int,
ar_from_acct in abn_headings.acct_no%type,
ar_to_acct in abn_headings.acct_no%type)
*/
}
finally
{
if (conn != null)
conn.Close();
}

我的连接字符串是正确的,因为我在我的代码中的其他地方使用它并且它有效。注释部分显然是我尝试使用的存储过程。请帮助我!

最佳答案

只是查看您的代码,但不熟悉此 OracleCommand 对象,看起来您正在创建参数,然后在中间创建一个新对象以清除所有添加的参数。从连接创建一个新对象,然后添加您的参数。尝试尝试下面更好的代码。此外,我会对任何连接、命令和对象使用 using 语句,以确保它们被关闭和处置。

编辑:没有看得太深,我的错。看起来参数名称在存储过程和 .net 代码中不匹配。此外,由于您要返回一个值,我会使用 ExecuteScalar 方法,ExeuteNonQuery 不会返回任何数据。

cmd = new OracleCommand("abstract_names.copy_account", conn);                      
cmd.Parameters.Add("r_rows_copied", OracleType.Int32).Direction = ParameterDirection.Output;
cmd.Parameters.Add("ar_old_acct ", OracleType.VarChar).Value = accountNumberDropDownList.SelectedValue.ToString();
cmd.Parameters.Add("ar_new_acct", OracleType.VarChar).Value = copyAccountDDL.SelectedValue.ToString();
cmd.CommandType = CommandType.StoredProcedure;
object value = cmd.ExecuteScalar();
conn.Close();

关于c# - ASP.NET 和 Oracle 存储过程错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8185381/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com