[英]ASP.NET and Oracle Stored Procedure Error
對於存儲過程和.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對象,就好像您正在創建參數,然后在中間創建一個新對象,以清除所有參數添加項。 從連接中創建一個新對象,然后添加您的參數。 嘗試嘗試以下更好的代碼。 我還將對任何連接對象,commnand對象使用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);
僅查看代碼即可,我認為您應該刪除該行,就可以了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.