新手求解答怎么防止两个人同一时间同时注册一个账号

TheMatrixGuo 2015-06-17 09:05:53
protected void Button1_Click(object sender, EventArgs e)
{
string strconn = "server=pc1234;database=WangDian;uid=sa;pwd=123456";//连接数据库
SqlConnection conn = new SqlConnection(strconn);
conn.Open();
SqlCommand cmd = conn.CreateCommand();


cmd.CommandText = "SELECT COUNT(*) FROM 管理员 WHERE 账号=@username and 密码=@passwd";
cmd.Parameters.Add(new SqlParameter("username", txtUserName.Text));
cmd.Parameters.Add(new SqlParameter("passwd", txtPwd.Text));
int i = Convert.ToInt32(cmd.ExecuteScalar());

if (i > 0)
{

Response.Write("<script> alert('添加数据失败!')</script>");
txtUserName.Text = "";
txtPwd.Text = "";

}


else
{

cmd.CommandText = "INSERT INTO 管理员(账号,密码)VALUES(@username,@passwd)";



int var = cmd.ExecuteNonQuery();

if (var > 0)
{
Response.Write("<script> alert('添加数据成功!')</script>");

txtUserName.Text = "";
txtPwd.Text = "";
}




conn.Close();






}
}
}

这是注册的那个按钮,怎么解决防止两个人 同一时间同时注册一个账号
...全文
516 14 打赏 收藏 举报
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
nitaiyoucala 2015-06-18
加上唯一主键吧
  • 打赏
  • 举报
回复
moonwrite 2015-06-18
username增加唯一性约束 代码层 可以加 lock 防止多个线程同时操作
  • 打赏
  • 举报
回复
binsweet 2015-06-18
1、在插入前先检查是否存在 2、数据库底层用主键或唯一索引确保无脏数据进入
  • 打赏
  • 举报
回复
fei缘如水 2015-06-18
存储过程写个吧。不会?看书去。
  • 打赏
  • 举报
回复
TheMatrixGuo 2015-06-17
引用 7 楼 u011147081 的回复:
[quote=引用 6 楼 starfd 的回复:] username增加唯一性约束
老师说不能设置约束用事务怎么做求解[/quote] 有详细点的代码吗?从来没写过事务
  • 打赏
  • 举报
回复
用事务?一定要? 那就是建个存储过程,开始事务(这个要求表锁),先select有没有用户,没有才insert
  • 打赏
  • 举报
回复
TheMatrixGuo 2015-06-17
引用 6 楼 starfd 的回复:
username增加唯一性约束
老师说不能设置约束用事务怎么做求解
  • 打赏
  • 举报
回复
username增加唯一性约束
  • 打赏
  • 举报
回复
於黾 2015-06-17
如果不考虑用户的体验,只是防止重复注册 那么用楼上2位的办法当然是最简单的. 当然这样一来你就无法区分到底是因为有其他用户抢先注册了账号导致插入失败,还是由于网络问题或数据库问题导致插入失败
  • 打赏
  • 举报
回复
qq_20622983 2015-06-17
同求同求,望大牛详细解答。。。。
  • 打赏
  • 举报
回复
於黾 2015-06-17
存储过程,事务,都行 总之你得保证查询和插入是在同一个过程里,避免出现脏数据
  • 打赏
  • 举报
回复
用程序和数据库实现 随便你选啊 说个简单的你在数据库建个唯一索引不就插不进去了
  • 打赏
  • 举报
回复
你可以把 [账号] 声明为 primary key。
  • 打赏
  • 举报
回复
zzh1063 2015-06-17
你把查询和新增放到一个事物里 应该可以吧 Begin select table 有 就 Rollback 没有 就 insert table Commit 这样应该可以吧
  • 打赏
  • 举报
回复
相关推荐
发帖
.NET社区

6.0w+

社区成员

.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • R小R
  • 喵叔哟
加入社区
帖子事件
创建了帖子
2015-06-17 09:05
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。