MySQL存储过程和c#数据读取器列错误值

时间:2015-04-29 08:18:54

标签: c# mysql stored-procedures sqldatareader mysql-connect

我的情况是必须根据多个条件返回变量值。最初设置为传递参数值。下面只是一个算法,

    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中的条件的行**

     }

任何帮助将不胜感激。

提前致谢。

1 个答案:

答案 0 :(得分:0)

问题解决了。

  

调用proc(@flag ...)

导致@flag不是0.所以else条件被执行了。 但是

  

MySqlParameter prm = new(....,Value = initValue);

将intiValue视为0,因此,存储过程中唯一的第一个if条件。每次都被执行。