我正在建立注册页一个字段是昵称,当用户尝试注册时,我想验证它是否已经存在。
我知道验证可能是来自客户端的ajax调用,但我的问题是针对后端。
这可能是验证昵称存在的步骤,避免过多地调用DB,也不会占用太多的响应时间。假设包含昵称数据的db表太大。
使用包含昵称复制数据的缓存,并在用户成功注册时对其进行更新,是一种好方法吗?
我想复制这种行为
https://disqus.com/admin/signup/
欢迎任何形式的建议。
最佳答案
1)首先创建这样的过程
CREATE PROCEDURE InsertUser
@vUserName varchar(50)
,@Password varchar(50)
IF NOT EXISTS(SELECT 1 FROM tblUsers WHERE vUsername=@vUserName AND vPassword=@Password)
BEGIN
INSERT INTO tblUsers(vUsername, vPassword) VALUES(vUserName , Password)
SELECT @@IDENTITY
END
ELSE
BEGIN
SELECT -500
END
2)编写调用此SP的函数
public int InsertUser(string vUserName, string vPassword)
{
System.Data.SqlClient.SqlConnection con = null;
try
{
con = new System.Data.SqlClient.SqlConnection("strConnectionString");
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand("InsertUser", con);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@vUserName", vUserName);
cmd.Parameters.AddWithValue("@Password", vPassword);
con.Open();
object res = null;
res = cmd.ExecuteScalar();
con.Close();
return res != null ? Convert.ToInt32(res) : 0;
}
catch (Exception)
{
throw;
}
finally { con.Close(); }
}
public void RegisterUser(string vUserName, string vPassword)
{
try
{
int res = InsertUser(vUserName, vPassword);
if (res > 0)
{
//user registered successgully
}
else if (res == 0)
{
// a logical error occured in query
}
else if (res == -500)
{
//user already exists. Please try another
}
}
catch (Exception ex)
{
//Catch Exception here
}
}