当前位置: 代码迷 >> ASP.NET >> 传递数组参数调用Oracle存储过程.解决方法
  详细解决方案

传递数组参数调用Oracle存储过程.解决方法

热度:4020   发布时间:2013-02-25 00:00:00.0
传递数组参数调用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();
  相关解决方案