gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 22:29:28 25 4
gpt4 key购买 nike

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

    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;

A. Sp。使用 sqleditor 调用调用 checkflag(值.....);返回适当的值

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=new parameter("pflag", initFlag);

    .
.
. cmd.parameter(prm)
using (mysqldatareader rdr=cmd.ExecuteReader())
{
if (rdr.HasRows())
{
rdr.Read();

**bool IsWritable=Convert.ToBoolean(Convert.ToInt32(rdr["IsEditable"])); // This is the line that returns value as passed parameter but not based on conditions in db and params **

     }

任何帮助将不胜感激。

提前致谢。

最佳答案

问题解决了。

call proc(@flag...)

结果@flag不是0。因此else条件被执行。但是

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

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

关于c# - MySQL 存储过程和 C# 数据读取器列错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29938066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com