C# ASP.NET MVC注册警报SQL func用户存在
我正在ASP.NET MVC中注册。我正在使用SQL Server函数检查是否已经存在具有相同用户名/电子邮件的用户。我不擅长编程,因为可能有一个明显的解决方案,而我目前还没有找到 我试图通过控制器或SQL Server函数直接调用警报弹出消息,就像“已经有一个用户使用相同的用户名/电子邮件。” 我从SQL Server函数返回了一个位,并将其转换为控制器中的布尔值,试图找到一种方法来警告消息,方法是使用javascript和model,或者尝试在视图中使用if语句,并通过控制器传递值 SQL Server功能代码:C# ASP.NET MVC注册警报SQL func用户存在,c#,sql,asp.net-mvc,model-view-controller,error-handling,C#,Sql,Asp.net Mvc,Model View Controller,Error Handling,我正在ASP.NET MVC中注册。我正在使用SQL Server函数检查是否已经存在具有相同用户名/电子邮件的用户。我不擅长编程,因为可能有一个明显的解决方案,而我目前还没有找到 我试图通过控制器或SQL Server函数直接调用警报弹出消息,就像“已经有一个用户使用相同的用户名/电子邮件。” 我从SQL Server函数返回了一个位,并将其转换为控制器中的布尔值,试图找到一种方法来警告消息,方法是使用javascript和model,或者尝试在视图中使用if语句,并通过控制器传递值 SQL
CREATE FUNCTION [dbo].[userExists]
(@email VARCHAR(1024),
@userName VARCHAR(1024))
RETURNS BIT
AS
BEGIN
IF ((SELECT Email FROM Users WHERE Email = @email) IS NOT NULL)
BEGIN
RETURN 1
END
IF ((SELECT UserName FROM Users WHERE UserName = @userName) IS NOT NULL)
BEGIN
RETURN 1
END
RETURN 0
END
SqlCommand eCmd = new SqlCommand("SELECT dbo.userExists(@email, @userName)", con);
eCmd.Parameters.AddWithValue("email", regModel.Email);
eCmd.Parameters.AddWithValue("userName", regModel.UserName);
bool exists = Convert.ToBoolean(eCmd.ExecuteScalar());
eCmd.Dispose();
if (exists != true)
{
SqlCommand cmd = new SqlCommand("INSERT INTO Users (UserName, Email, Password) VALUES (@userName, @email, @password)", con);
cmd.Parameters.AddWithValue("userName", regModel.UserName);
cmd.Parameters.AddWithValue("email", regModel.Email);
cmd.Parameters.AddWithValue("password", MD5Hash(regModel.Password));
cmd.ExecuteNonQuery();
cmd.Dispose();
}
else
{
return View();
}
控制器操作代码:
CREATE FUNCTION [dbo].[userExists]
(@email VARCHAR(1024),
@userName VARCHAR(1024))
RETURNS BIT
AS
BEGIN
IF ((SELECT Email FROM Users WHERE Email = @email) IS NOT NULL)
BEGIN
RETURN 1
END
IF ((SELECT UserName FROM Users WHERE UserName = @userName) IS NOT NULL)
BEGIN
RETURN 1
END
RETURN 0
END
SqlCommand eCmd = new SqlCommand("SELECT dbo.userExists(@email, @userName)", con);
eCmd.Parameters.AddWithValue("email", regModel.Email);
eCmd.Parameters.AddWithValue("userName", regModel.UserName);
bool exists = Convert.ToBoolean(eCmd.ExecuteScalar());
eCmd.Dispose();
if (exists != true)
{
SqlCommand cmd = new SqlCommand("INSERT INTO Users (UserName, Email, Password) VALUES (@userName, @email, @password)", con);
cmd.Parameters.AddWithValue("userName", regModel.UserName);
cmd.Parameters.AddWithValue("email", regModel.Email);
cmd.Parameters.AddWithValue("password", MD5Hash(regModel.Password));
cmd.ExecuteNonQuery();
cmd.Dispose();
}
else
{
return View();
}
到目前为止一切正常。我试图实现的是消息警报,指示用户是否已经存在
我试着研究如何使用“return JavaScript(“\code\””)尽我所能,但是,我不想工作。在您的
控制器
方法中,您需要使用ExecuteNonQuery
从sql语句中获取返回的内容。您必须将您的值存储在从函数获取的某个变量中
if (exists != true)
{
SqlCommand cmd = new SqlCommand("INSERT INTO Users (UserName, Email, Password) VALUES (@userName, @email, @password)", con);
cmd.Parameters.AddWithValue("userName", regModel.UserName);
cmd.Parameters.AddWithValue("email", regModel.Email);
cmd.Parameters.AddWithValue("password", MD5Hash(regModel.Password));
ViewBag.myval = cmd.ExecuteNonQuery(); // need to use ExecuteNonQuery
cmd.Dispose();
}
else
{
return View();
}
查看时,访问您的值
@Model.myval
之后,您可以使用javascript
发布消息。根据您的产品结构
int result=0;
SqlCommand cmd = new SqlCommand("INSERT INTO Users (UserName, Email, Password) VALUES (@userName, @email, @password)", con);
cmd.Parameters.AddWithValue("userName", regModel.UserName);
cmd.Parameters.AddWithValue("email", regModel.Email);
cmd.Parameters.AddWithValue("password", MD5Hash(regModel.Password));
result=cmd.ExecuteNonQuery();
cmd.Dispose();
现在,根据您获得的值,您可以使用jQuery警告消息。您可以将此值作为Model
或在viewBag
中传递。我将尝试使用viewbag
as
ViewBag.resultOfQuery=result;
return View();
<script>
function YourFunctionName()
{
if('@ViewBag.resultOfQuery'=="1")
alert("There is already a user with same Username/Email.");
else
alert("Inserted Successfully");
}
</script>
从jQuery的前端,您可以根据需要基于警报@ViewBag.resultOfQuery
ViewBag.resultOfQuery=result;
return View();
<script>
function YourFunctionName()
{
if('@ViewBag.resultOfQuery'=="1")
alert("There is already a user with same Username/Email.");
else
alert("Inserted Successfully");
}
</script>
函数YourFunctionName()
{
如果('@ViewBag.resultOfQuery'==“1”)
警报(“已存在具有相同用户名/电子邮件的用户”);
其他的
警报(“插入成功”);
}
为什么要使用.ExecuteScalar()
执行不返回任何数据的插入操作??对于这种情况,请使用.ExecuteNonQuery()
来代替……啊,我错过了那部分。我会换的。很好,很有效!我所做的只是在else语句中,我使用ViewBag.EmailExists=1并包含js代码,经过测试,现在它工作了!谢谢这很好,唯一的一点是ViewBag.myval只有在电子邮件不存在的情况下才被分配,所以我想说的是,我只是想让事情匹配起来,这样我就知道什么在哪里了。因为我从这篇文章中学到的是,我可以指定一个自定义ViewBag变量,所以我可以坚持使用ViewBag.EmailExists=1或0。