Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# mysql可选参数的解决方法_C#_Mysql_Optional Parameters - Fatal编程技术网

C# mysql可选参数的解决方法

C# mysql可选参数的解决方法,c#,mysql,optional-parameters,C#,Mysql,Optional Parameters,我正在尝试从mssql-->mysql转换存储过程。并且由于mysql不支持可选参数,所以只能使用可选参数。对于mssql,参数初始化为NULL,并基于p_模式值调用不同的语句。是否有解决方法? 我转换的MySQL存储过程如下: CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_tblLogin`( p_LoginId int/* =null */, p_LoginName varchar(100)/* =null */,

我正在尝试从mssql-->mysql转换存储过程。并且由于mysql不支持可选参数,所以只能使用可选参数。对于mssql,参数初始化为NULL,并基于p_模式值调用不同的语句。是否有解决方法? 我转换的MySQL存储过程如下:

    CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_tblLogin`(
    p_LoginId int/* =null */,
    p_LoginName varchar(100)/* =null */,
    p_Email varchar(100)/* =null */,
    p_Username varchar(20)/* =null */,
    p_Password varchar(20)/* =null */,
    p_Rights int/* =null */,
    p_Mode varchar(25))
    BEGIN

    IF (p_Mode='Insert') THEN 
    IF NOT EXISTS (SELECT * FROM tblLogin WHERE Username=p_Username)
    THEN
        INSERT INTO tblLogin(LoginName,Email,Username,Password,Rights,ModifiedDate) VALUES(p_LoginName,p_Email,p_Username,p_Password,p_Rights,now());
    END IF;
    END IF;

    IF (p_Mode='View') 
    THEN
        SELECT * FROM tblLogin;
    END IF;

    IF (p_Mode='ViewByID') 
    THEN
        SELECT * FROM tblLogin WHERE LoginId = p_LoginId;
    END IF;

    IF (p_Mode='ChkLogin') 
    THEN
        SELECT * FROM tblLogin WHERE Username = p_Username and Password = p_Password;
    END IF;

    IF (p_Mode='Update') 
    THEN
        UPDATE tblLogin
        SET `LoginName` = p_LoginName
          ,`Email` = p_Email
          ,`Username` = p_Username
          ,`Password` = p_Password
          ,`Rights` = p_Rights
          ,`ModifiedDate` = now()
        WHERE LoginId = p_LoginId;
    END IF;

    IF (p_Mode='Delete') 
    THEN
        DELETE FROM `tblLogin` WHERE LoginId = p_LoginId;
    END IF;

    END

查看
VARCHAR(20)
获取密码意味着这是一个很好的机会,您可以修复这个问题并应用正确的密码哈希方法。至少你应该使用它来产生大约60个字符长的字符串。我想即使在这个改变之后,我的问题仍然会存在。因为mysql不允许我像MSSQL一样将参数初始化为NULL。虽然从c#调用它时只使用了几个参数,但它总是给我一个错误,即“在集合中找不到参数”。有办法解决这个问题吗?为什么不把这些都转换成应用程序代码呢?像这样使用存储过程真是一团糟。与Oracle、Postgres或SQL Server等其他RDBMS平台相比,MySQL的存储过程非常薄弱。这是我最后的选择。中断存储过程并创建新的存储过程,然后从应用程序端(C#)使用精确的参数调用精确的存储过程。我只是想知道是否有人知道其他的方法!:)这不值得修理。这是DBA在害怕编写应用程序代码时所做的事情。不要这样做。在应用层编写应用程序逻辑,并使数据库尽可能简单。你不会后悔的。看到
VARCHAR(20)
的密码意味着这是一个很好的机会,你可以修复这个问题并应用正确的密码散列方法。至少你应该使用它来产生大约60个字符长的字符串。我想即使在这个改变之后,我的问题仍然会存在。因为mysql不允许我像MSSQL一样将参数初始化为NULL。虽然从c#调用它时只使用了几个参数,但它总是给我一个错误,即“在集合中找不到参数”。有办法解决这个问题吗?为什么不把这些都转换成应用程序代码呢?像这样使用存储过程真是一团糟。与Oracle、Postgres或SQL Server等其他RDBMS平台相比,MySQL的存储过程非常薄弱。这是我最后的选择。中断存储过程并创建新的存储过程,然后从应用程序端(C#)使用精确的参数调用精确的存储过程。我只是想知道是否有人知道其他的方法!:)这不值得修理。这是DBA在害怕编写应用程序代码时所做的事情。不要这样做。在应用层编写应用程序逻辑,并使数据库尽可能简单。你不会后悔的。