日期:2014-05-17  浏览次数:20374 次

传递数组参数调用Oracle存储过程...
是必须要使用Oracle.DataAccess.Client.OracleCollectionType.PLSQLAssociativeArray吗,这个在System.Data.OracleClient里没有相应的类吗?用了某个框架的数据库操作类,有这样的方法:
private static OracleCommand BuildIntCommand(OracleConnection con, string StoredProcName, IDataParameter[] Parameters)
  {
  OracleCommand command = BuildQueryCommand(con, StoredProcName, Parameters);
  command.Parameters.Add(new Oracle.DataAccess.Client.OracleParameter("ReturnValue", Oracle.DataAccess.Client.OracleDbType.Int16, 4, ParameterDirection.ReturnValue, false, 0, 0, string.Empty, DataRowVersion.Default, null));
  return command;
  }
老是出错,提示:OracleParameterCollection 只接受非空的 OracleParameter 类型对象,不接受 OracleParameter 对象
头都大了,急呀

------解决方案--------------------
Parameters 你这个参数是空的。你没赋值
------解决方案--------------------
如果不兼容则造成编译不通过。

错误是在编译的情况下出现的还是运行的情况下出现的?
如果编译时候出现错误,按下面的代码修改:

command.Parameters.Add(new OracleParameter(":ReturnValue", 100));
------解决方案--------------------
创建输入、输出和返回值的 OracleParameter 对象,并将其添加到 OracleCommand 对象的参数集合中。 

cmd.Parameters.Add("reccount", OracleType.Number).Direction =
ParameterDirection.Output;

该行代码是以下两行代码的简写形式: 

cmd.Parameters.Add("reccount", OracleType.Number);
cmd.Parameters["reccount"].Direction = ParameterDirection.Output;

------解决方案--------------------
C# code

...
cmd.CommandText = "sp_test";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new OracleParameter("a", 1));
cmd.Parameters.Add(new OracleParameter("b", OracleType.Number));
cmd.Parameters["b"].Direction = ParameterDirection.Output;
cmd.ExecuteNonQuery();
MessageBox.Show(cmd.Parameters["b"].Value.ToString());
conn.Close();
我的异常网推荐解决方案:oracle存储过程,http://www.aiyiweb.com/oracle-develop/177537.html