C# mysql可选参数的解决方法
我正在尝试从mssql-->mysql转换存储过程。并且由于mysql不支持可选参数,所以只能使用可选参数。对于mssql,参数初始化为NULL,并基于p_模式值调用不同的语句。是否有解决方法? 我转换的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 */,
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在害怕编写应用程序代码时所做的事情。不要这样做。在应用层编写应用程序逻辑,并使数据库尽可能简单。你不会后悔的。