程序里面:
OracleDatabase dbSQL = DatabaseFactory.CreateDatabase() as OracleDatabase;
string strSql = "uspUpdateSysMenu";
OracleCommand dbCommand = dbSQL.GetStoredProcCommand(strSql) as OracleCommand;
try
{
OracleParameter[] parameters = {
new OracleParameter("P_MenuID", OracleType.NVarChar),
new OracleParameter("P_MenuName",OracleType.NVarChar),
new OracleParameter("P_MenuHref",OracleType.NVarChar),
new OracleParameter("P_MenuIndex",OracleType.Number),
new OracleParameter("P_ParentID",OracleType.NVarChar ),
new OracleParameter("P_Iconcss",OracleType.NVarChar),
new OracleParameter("P_Isexpand",OracleType.Number ),
new OracleParameter("P_IsMenu",OracleType.Number),
};
parameters[0].Value = model.MenuID;
parameters[1].Value = model.MenuName;
parameters[2].Value = model.MenuHref;
parameters[3].Value = model.MenuIndex;
parameters[4].Value = model.ParentID;
parameters[5].Value = model.Iconcss;
parameters[6].Value = model.Isexpand == false ? 0 : 1;
parameters[7].Value = model.IsMenu == false ? 0 : 1;
foreach (OracleParameter parameter in parameters)
{
dbCommand.Parameters.Add(parameter);
}
int iResult = dbSQL.ExecuteNonQuery(dbCommand);
存储过程:
CREATE OR REPLACE PROCEDURE APPRAISE_USER.uspupdatesysmenu (
p_menuid VARCHAR2,
p_menuname VARCHAR2,
p_menuhref VARCHAR2,
p_menuindex NUMBER,
p_parentid VARCHAR2,
p_iconcss VARCHAR2,
p_isexpand NUMBER,
p_ismenu NUMBER
)
AS
BEGIN
UPDATE sysmenu
SET menuname = p_menuname,
menuhref = p_menuhref,
menuindex = p_menuindex,
parentid = p_parentid,
iconcss = p_iconcss,
isexpand = p_isexpand,
ismenu = p_ismenu
WHERE menuid = p_menuid;
END;
整个调用的过程没有出现任何异常,但是执行完存储过程以后,修改的信息没有任何变化,就跟没有执行存储过程一样,不明白怎么回事。
貌似只是创建了个存储过程,但并没有调用语句,也就是没调用。
string strSql = "uspUpdateSysMenu";
OracleCommand dbCommand = dbSQL.GetStoredProcCommand(strSql) as OracleCommand;
这个就是程序里面调用的语句。
帮顶
满心欢喜的看见有人回复~~屁颠屁颠的打开一看,桑心的看见一个‘帮顶’
你可以先调试一下你的sql代码,看看问题出在哪?
oracle里面的存储过程在数据库里面执行是没有问题的。
dbCommand.CommandType = CommandType.StoredProcedure;加上这句话就对了
同事帮忙找到答案了。我的那个主键menuid是char(10),比如'01010503 '后面会带两空格,很奇怪的是在PLSQL里面执行select语句、update语句时menuid='01010503'可以查出结果,但是在程序里面执行update存储过程的时候menuid='01010503'就不行,用menuid='01010503 '才可以。
你这不是企业库么,调用存储过程不用写这么复杂的代码吧,试试下面的方法
var db = DatabaseFactory.CreateDatabase("");
var command = db.GetStoredProcCommand("Proc_DepositTransfer");//存储过程
db.AddInParameter(command, "@LandlordId", DbType.Int32, landlordId);
db.AddInParameter(command, "@UserId", DbType.Int32, userId);
db.AddInParameter(command, "@Deposit", DbType.Decimal, deposit);
db.AddInParameter(command, "@Earnings", DbType.Int32, earnings);
db.AddOutParameter(command, "@Return", DbType.Int32, 4);//输出参数
db.ExecuteNonQuery(command);
return (int)command.Parameters["@Return"].Value;