/// <summary>
/// 执行存储过程,返回影响的行数
/// </summary>
/// <param name="storedProcName">存储过程名</param>
/// <param name="parameters">存储过程参数</param>
/// <param name="rowsAffected">影响的行数</param>
/// <returns></returns>
public static int RunProcedure(string storedProcName, IDataParameter[] parameters)
{
using (OracleConnection connection = new OracleConnection(connectionString))
{
try
{
int result;
connection.Open();
OracleCommand command = BuildIntCommand(connection, storedProcName, parameters);
command.ExecuteNonQuery();
result = (int)command.Parameters["ReturnValue"].Value;
connection.Close();
return result;
}
catch (Exception)
{
throw;
}
}
}
这个是在oraclehelper中的一个调用存储过程的方法,我连接的是oracle数据库。当我断点测试到
command.ExecuteNonQuery();
这句话时,出现下面的错误:
ORA-06550: 第 1 行, 第 23 列:
PLS-00222: 在此范围中不存在名为 'AJ_SONGDAHUIZHENG_INSERT' 的函数
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored
是什么原因啊?
/// 执行存储过程,返回影响的行数
/// </summary>
/// <param name="storedProcName">存储过程名</param>
/// <param name="parameters">存储过程参数</param>
/// <param name="rowsAffected">影响的行数</param>
/// <returns></returns>
public static int RunProcedure(string storedProcName, IDataParameter[] parameters)
{
using (OracleConnection connection = new OracleConnection(connectionString))
{
try
{
int result;
connection.Open();
OracleCommand command = BuildIntCommand(connection, storedProcName, parameters);
command.ExecuteNonQuery();
result = (int)command.Parameters["ReturnValue"].Value;
connection.Close();
return result;
}
catch (Exception)
{
throw;
}
}
}
这个是在oraclehelper中的一个调用存储过程的方法,我连接的是oracle数据库。当我断点测试到
command.ExecuteNonQuery();
这句话时,出现下面的错误:
ORA-06550: 第 1 行, 第 23 列:
PLS-00222: 在此范围中不存在名为 'AJ_SONGDAHUIZHENG_INSERT' 的函数
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored
是什么原因啊?
没有 AJ_SONGDAHUIZHENG_INSERT 函数。。
s_xtajbh nvarchar2,--输入变量
s_ssdr nvarchar2,
s_wsmcjs nvarchar2,
s_sddd nvarchar2,
s_ssdrqm nvarchar2,
s_sdrq nvarchar2,
s_sdr nvarchar2,
s_bz nvarchar2,
s_zltz number,
s_sxgz number,
s_tzgz number,
s_cljd number,
o_res out number--输出变量,这里的out参数在存储过程中必须给他赋值,否则存储过程编译出错。
)isbegin
--添加
insert into aj_songdahuizheng values(s_xtajbh,s_ssdr,s_wsmcjs,s_sddd,s_ssdrqm,s_sdrq,s_sdr,s_bz,s_zltz,s_sxgz,s_tzgz,s_cljd);
o_res := 1;--给输出参数赋值,增加返回值(此操作必须在过程中执行)
COMMIT;--增加事务控制
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
o_res := 0;
end aj_songdahuizheng_insert;
有的,你看看。
里面呢
/// 创建 OracleCommand 对象实例(用来返回一个整数值)
/// </summary>
/// <param name="storedProcName">存储过程名</param>
/// <param name="parameters">存储过程参数</param>
/// <returns>OracleCommand 对象实例</returns>
private static OracleCommand BuildIntCommand(OracleConnection connection,string storedProcName, IDataParameter[] parameters)
{
OracleCommand command = BuildQueryCommand(connection,storedProcName, parameters );
command.Parameters.Add( new OracleParameter ( "ReturnValue",
OracleType.Int32, 4, ParameterDirection.ReturnValue,
false,0,0,string.Empty,DataRowVersion.Default,null ));
return command;
}
这样子,好像这里没有错吧。
o_res <-- 这个名字应该保持一致。ParameterDirection.ReturnValue 也不对,应该是Output。另外,还有很多参数呢?http://blog.csdn.net/fangxinggood/article/details/507989