是必须要使用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 对象
头都大了,急呀
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 对象
头都大了,急呀
会不会是两个不兼容?
如果编译时候出现错误,按下面的代码修改:command.Parameters.Add(new OracleParameter(":ReturnValue", 100));
ParameterDirection.Output;该行代码是以下两行代码的简写形式: cmd.Parameters.Add("reccount", OracleType.Number);
cmd.Parameters["reccount"].Direction = ParameterDirection.Output;
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
...
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();