是必须要使用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 对象
头都大了,急呀

解决方案 »

  1.   

    Parameters 你这个参数是空的。你没赋值
      

  2.   

    调试了,不是空的,有9个Parameter
      

  3.   

    对了,那个OracleCommand,是System.Data.OrcleClient空间的,但参数是Oracle.DataAccess....
    会不会是两个不兼容?
      

  4.   

    如果不兼容则造成编译不通过。错误是在编译的情况下出现的还是运行的情况下出现的?
    如果编译时候出现错误,按下面的代码修改:command.Parameters.Add(new OracleParameter(":ReturnValue", 100));
      

  5.   

    创建输入、输出和返回值的 OracleParameter 对象,并将其添加到 OracleCommand 对象的参数集合中。 cmd.Parameters.Add("reccount", OracleType.Number).Direction =
        ParameterDirection.Output;该行代码是以下两行代码的简写形式: cmd.Parameters.Add("reccount", OracleType.Number);
    cmd.Parameters["reccount"].Direction = ParameterDirection.Output;
      

  6.   

    create table t1(a int);create or replace procedure sp_test(a number) is
    begin
         insert into t1 values(a);
    end;OracleConnection conn = new OracleConnection("Data Source=xsjly;User Id=tpdivision;Password=division;");
    conn.Open();
    OracleCommand cmd = new OracleCommand();
    cmd.Connection = conn;
    cmd.CommandText = "sp_test";
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add(new OracleParameter("a", 1));
    cmd.ExecuteNonQuery();
    conn.Close();如果想用框架的话建议使用enterpriselibrary
      

  7.   


    ...
    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();