企业库调用oracle存储过程ExecuteSprocAccessor错误
问题描述:
我正在做一个MVC应用程序。我正在使用带有企业库连接的Oracle数据库。企业库调用oracle存储过程ExecuteSprocAccessor错误
我的问题是使用ExecuteSprocAccessor
当检索数据...
当我使用Linq
绑定返回的数据,它工作正常。但是,当我ExecuteSprocAccessor
得到一个错误..... The number of parameters does not match number of values for stored procedure
Database db = readConfig.ReadWebConfig();
string SP_NAME = "PKG_AR_PRESUPUESTOS_HS.GET_CAMPANAS";
using (DbCommand dbCommand = db.GetStoredProcCommand(SP_NAME))
{
dbCommand.Parameters.Clear();
db.AddInParameter(dbCommand, "p_COD_PAIS", DbType.Int32, 32);
db.AddInParameter(dbCommand, "p_COD_COMPANIA", DbType.Int32, 36);
db.AddInParameter(dbCommand, "p_COD_MEDIO", DbType.Int32, 4);
db.AddInParameter(dbCommand, "p_COD_CLIENTE", DbType.Int32, 285);
OracleParameter oraPara1 = new OracleParameter("CURSORSALIDA", OracleType.Cursor);
oraPara1.Direction = ParameterDirection.Output;
dbCommand.Parameters.Add(oraPara1);
List<Campana> result2 = db.ExecuteDataSet(dbCommand).Tables[0].AsEnumerable().ToList().ConvertAll(dr => new Campana
{
COD_CAMPANA = Convert.ToInt32(dr["COD_CAMPANA"].ToString()),
COD_COMPANIA = Convert.ToInt32(dr["COD_COMPANIA"].ToString()),
COD_PRODUCTO = Convert.ToInt32(dr["COD_PRODUCTO"].ToString()),
DES_CAMPANA = dr["DES_CAMPANA"].ToString()
});
这项工作很好...
但是当我使用
Database db = readConfig.ReadWebConfig();
string SP_NAME = "PKG_AR_PRESUPUESTOS_HS.GET_CAMPANAS";
using (DbCommand dbCommand = db.GetStoredProcCommand(SP_NAME))
{
dbCommand.Parameters.Clear();
db.AddInParameter(dbCommand, "p_COD_PAIS", DbType.Int32, 32);
db.AddInParameter(dbCommand, "p_COD_COMPANIA", DbType.Int32, 36);
db.AddInParameter(dbCommand, "p_COD_MEDIO", DbType.Int32, 4);
db.AddInParameter(dbCommand, "p_COD_CLIENTE", DbType.Int32, 285);
OracleParameter oraPara1 = new OracleParameter("CURSORSALIDA", OracleType.Cursor);
oraPara1.Direction = ParameterDirection.Output;
dbCommand.Parameters.Add(oraPara1);
List<Campana> result = db.ExecuteSprocAccessor<Campana>(SP_NAME, dbCommand.Parameters).ToList<Campana>();
得到了一个错误...... The number of parameters does not match number of values for stored procedure
即使我使用Mapping
IRowMapper<Campana> resmapper = MapBuilder<Campana>.MapAllProperties()
.Map(x => x.COD_CAMPANA).ToColumn("COD_CAMPANA")
.Map(x => x.COD_COMPANIA).ToColumn("COD_COMPANIA")
.Map(x => x.DES_CAMPANA).ToColumn("DES_CAMPANA")
.Map(x => x.COD_PRODUCTO).ToColumn("COD_PRODUCTO")
.Build();
DataTable dt = db.ExecuteDataSet(dbCommand).Tables[0];
List<Campana> result = db.ExecuteSprocAccessor<Campana>(SP_NAME, resmapper, dbCommand.Parameters).ToList<Campana>();
我得到了同样的错误...
有什么不对ExecuteSprocAccessor
?
无论如何,我的Campana类看起来像这样。
public class Campana
{
public Int32 COD_COMPANIA { get; set; }
public Int32 COD_CAMPANA { get; set; }
public string DES_CAMPANA { get; set; }
public Int32 COD_PRODUCTO { get; set; }
}
答
我解决它传递对象[]代替POR cmd.Parameters
object[] param = ParametertoObj(dbCommand);
List<Campana> result = db.ExecuteSprocAccessor<Campana>(SP_NAME, resmapper, param).ToList<Campana>();
和我的类,其中我建立一个数组
public object[] ParametertoObj(DbCommand cmd)
{
object[] obj = new object[cmd.Parameters.Count];
int i = 0;
foreach (DbParameter item in cmd.Parameters)
{
obj[i] = item.Value;
i++;
}
return obj;
}
也许你应该张贴的存储过程的代码以及 –