我的情况是必须根据多个条件返回变量值。最初设置为传递参数值。下面只是一个算法,
create proc checkFlag (ppleid int, pflag bit, loginid int)
begin
declare vflag bit;
declare vhasRights bit;
declare vIsLocked bit;
declare vlockedUid int;
set vflag=pflag; // assign as passed param
if (vflag = 0)
then
select id, name,vflag as 'IsEditable'
from peopletable
where id=ppleid;
else
-- algo to check whether loginid has rights to edit
if (vhasrights = 1)
then
-- sql statements to check whether record is not write locked into vIsAlreadyLocked
if (vIsAlreadyLocked = 1)
then
--- sql statements to check whether locked user is login user in vlockedUid
if (vlockedUid = ploginid)
then
set vflag =1;
else
set vflag=0;
end if;
else
set vflag=0;
end if;
select id, name,vflag as 'IsEditable'
from peopletable
where id=ppleid;
end if;
end;
一个。 SP。打电话给sqleditor call checkflag(values .....);返回适当的值
B中。 SP。来自c#
的电话internal void ReadPpl()
{
bool initFlag=<flag based on client end condition>;
. code for creating connection and command of type storedproc
.
MysqlParameter prm =新参数(“pflag”,initFlag);
.
.
. cmd.parameter(prm)
using (mysqldatareader rdr=cmd.ExecuteReader())
{
if (rdr.HasRows())
{
rdr.Read();
** bool IsWritable = Convert.ToBoolean(Convert.ToInt32(rdr [“IsEditable”])); //这是将值作为传递参数返回但不基于db和params中的条件的行**
}
任何帮助将不胜感激。
提前致谢。
答案 0 :(得分:0)
问题解决了。
调用proc(@flag ...)
导致@flag不是0.所以else条件被执行了。 但是
MySqlParameter prm = new(....,Value = initValue);
将intiValue视为0,因此,存储过程中唯一的第一个if条件。每次都被执行。