从C#错误运行Oracle存储过程
我是甲骨文的新手。我创建了一个存储过程来获取表数据从C#错误运行Oracle存储过程,c#,oracle,stored-procedures,C#,Oracle,Stored Procedures,我是甲骨文的新手。我创建了一个存储过程来获取表数据 create or replace procedure GETLATESTNEWS(cv_results in out sys_refcursor) as begin open cv_results for select news from tbl_newsdetails; EXCEPTION WHEN OTHERS THEN ROLLBACK; RAISE_APPLICATION_ERROR(-99999,'Not Inserted
create or replace
procedure GETLATESTNEWS(cv_results in out sys_refcursor)
as
begin
open cv_results for
select news from tbl_newsdetails;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
RAISE_APPLICATION_ERROR(-99999,'Not Inserted due to :'||SQLERRM);
end;
程序编译成功。但是在我的.net代码中,我得到了一个错误
ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'GETLATESTNEWS'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
我的.net代码是
con.ConnectionString = constring;
con.Open();
OracleCommand cmd = new OracleCommand();
cmd.Connection = con;
cmd.CommandText = "GETLATESTNEWS";
cmd.CommandType = CommandType.StoredProcedure;
rdr = cmd.ExecuteReader();
可能是什么问题?。我能够使用insert存储过程进行插入。但是select不起作用 尝试添加:
cmd.Parameters.Add("cv_results", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
尝试添加:
cmd.Parameters.Add("cv_results", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
我用过这个,它对我有用
OracleCommand oraCommand = new OracleCommand();
oraCommand.Connection = oraConnection;
oraCommand.CommandType = CommandType.StoredProcedure;
oraCommand.CommandText = "procedurename";
OracleParameter oraParameter = new OracleParameter(":result", OracleDbType.RefCursor, ParameterDirection.ReturnValue);
oraCommand.Parameters.Add(oraParameter);
oraCommand.ExecuteNonQuery();
OracleDataAdapter oraDataAdapter = new OracleDataAdapter(oraCommand);
Oracle.DataAccess.Types.OracleRefCursor refCursor = (Oracle.DataAccess.Types.OracleRefCursor)oraParameter.Value;
OracleDataReader reader = refCursor.GetDataReader();
但如果将存储过程作为ref\u cursor返回。我使用了它,它对我有效
OracleCommand oraCommand = new OracleCommand();
oraCommand.Connection = oraConnection;
oraCommand.CommandType = CommandType.StoredProcedure;
oraCommand.CommandText = "procedurename";
OracleParameter oraParameter = new OracleParameter(":result", OracleDbType.RefCursor, ParameterDirection.ReturnValue);
oraCommand.Parameters.Add(oraParameter);
oraCommand.ExecuteNonQuery();
OracleDataAdapter oraDataAdapter = new OracleDataAdapter(oraCommand);
Oracle.DataAccess.Types.OracleRefCursor refCursor = (Oracle.DataAccess.Types.OracleRefCursor)oraParameter.Value;
OracleDataReader reader = refCursor.GetDataReader();
但如果您将存储过程作为ref\u cursor返回。您的存储过程需要一个参数(sys\u refcursor),但您没有传递任何内容。请勾选“好”。我会阅读并让您知道。请。请记住,链接只是为了告诉您问题所在。您应该进一步调查,因为Microsoft Oracle.NET提供程序现在已被弃用,您应该使用OracleSteve提供的最新版本。这是我这边的一个错误。事实上,我非常习惯使用sqlserver。所以突然搬家引起了这个问题。它现在工作得很好。非常感谢史蒂夫:)您的存储过程需要一个参数(sys_refcursor),但您没有传递任何内容。请勾选“好”。我会阅读并让您知道。请。请记住,链接只是为了告诉您问题所在。您应该进一步调查,因为Microsoft Oracle.NET提供程序现在已被弃用,您应该使用OracleSteve提供的最新版本。这是我这边的一个错误。事实上,我非常习惯使用sqlserver。所以突然搬家引起了这个问题。它现在工作得很好。非常感谢史蒂夫:)