根据我发现的教程,我正在编写程序的登录/注册模块。 一切正常,但后来我从MSSql切换到MySql数据库。
问题是我无法重写我的InsertUser
程序。此过程需要3个参数(用户名,密码和电子邮件),并且可以返回3个不同的值
-1 如果已使用电子邮件,则 -2 如果注册成功, id 新行
我试着这样写:
DELIMITER $$
CREATE PROCEDURE InsertUser(
IN username VARCHAR(50),
IN pass VARCHAR(255),
IN email VARCHAR(50))
BEGIN
IF (SELECT Id FROM Users WHERE UserName=username) THEN
BEGIN
SELECT -1;
END;
ELSEIF (SELECT Id FROM Users WHERE Email=email)
THEN
BEGIN
SELECT -2;
END;
ELSE
BEGIN
INSERT INTO Users (UserName, Password, RegDate, Email) VALUES(username, pass, CURDATE(), email);
SELECT LAST_INSERT_ID();
END;
END IF;
END $$
DELIMITER ;
当我尝试使用Visual Studio的上述代码创建此过程时,我收到错误(语法错误)。但是如果我从phpmyadmin页面执行此操作则没有错误。但无论我提供什么参数,它根本不起作用(不返回任何东西)。我正在使用phpmyadmin页面并执行过程选项来测试它。
这是原始的T-Sql代码:
CREATE PROCEDURE [dbo].[Insert_User]
@Username NVARCHAR(20),
@Password NVARCHAR(20),
@Email NVARCHAR(50)
AS
BEGIN
SET NOCOUNT ON;
IF EXISTS(SELECT Id FROM Users WHERE Username = @Username)
BEGIN
SELECT -1 -- Username exists.
END
ELSE IF EXISTS(SELECT Id FROM Users WHERE Email = @Email)
BEGIN
SELECT -2 -- Email exists.
END
ELSE
BEGIN
INSERT INTO [Users]
([Username]
,[Password]
,[Email]
,[RegDate])
VALUES
(@Username
,@Password
,@Email
,GETDATE())
SELECT SCOPE_IDENTITY() -- UserId
END
END
有什么想法吗?
答案 0 :(得分:1)
6.10.1 Using Stored Routines from Connector/Net
...
与命令行和GUI客户端不同,在Connector / Net中创建存储过程时,不需要指定特殊的分隔符。
...
MySQL中的一个选项(命令行):
DELIMITER $$
CREATE PROCEDURE `InsertUser` (
IN `_username` VARCHAR(50),
IN `_pass` VARCHAR(255),
IN `_email` VARCHAR(50)
)
BEGIN
IF (SELECT `Id` FROM `Users` WHERE `UserName` = `_username`) THEN
SELECT -1;
ELSEIF (SELECT `Id` FROM `Users` WHERE `Email` = `_email`) THEN
SELECT -2;
ELSE
INSERT INTO `Users` (`UserName`, `Password`, `RegDate`, `Email`)
VALUES (`_username`, `_pass`, CURDATE(), `_email`);
SELECT LAST_INSERT_ID();
END IF;
END$$
DELIMITER ;
答案 1 :(得分:0)
谢谢,但我自己解决了。我不知道为什么我要如此糟糕地使用EXISTS功能:)我摆脱它现在它的工作原理:
BEGIN
IF(SELECT Id FROM Users WHERE UserName=username) IS NOT NULL THEN
SELECT -1;
ELSEIF (SELECT Id FROM Users WHERE Email=email) IS NOT NULL THEN
SELECT -2;
ELSE
INSERT INTO Users(UserName, Password, RegDate, Email) VALUES (username, pass, CURDATE(), email);
SELECT LAST_INSERT_ID();
END IF;
END