ASP.. NET和Oracle存储过程错误
本文关键字:存储过程 错误 Oracle NET ASP | 更新日期: 2023-09-27 18:15:12
在存储过程和。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();
}
我的连接字符串是正确的,因为我使用它在我的代码和它的工作。注释部分显然是我试图使用的存储过程。请帮帮我!
只是看看你的代码,不熟悉这个oracleccommand对象,它看起来像你正在创建参数,然后在中间创建一个新对象,消除所有的参数添加。从连接创建一个新对象,然后添加参数。下面尝试编写更好的代码。此外,我还会对任何连接、命令对象使用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();
您为cmd
变量分配了一个新实例,然后您失去了对您所做的操作的引用。
:
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();
这是错误的行:
cmd = new OracleCommand("abstract_names.copy_account", conn);
只要看看你的代码,我认为你应该简单地删除那一行,它应该是好的