问题描述
protectedvoidButton1_Click(objectsender,EventArgse){stringstrconn="server=pc1234;database=WangDian;uid=sa;pwd=123456";//连接数据库SqlConnectionconn=newSqlConnection(strconn);conn.Open();SqlCommandcmd=conn.CreateCommand();cmd.CommandText="SELECTCOUNT(*)FROM管理员WHERE账号=@usernameand密码=@passwd";cmd.Parameters.Add(newSqlParameter("username",txtUserName.Text));cmd.Parameters.Add(newSqlParameter("passwd",txtPwd.Text));inti=Convert.ToInt32(cmd.ExecuteScalar());if(i>0){Response.Write("<script>alert('添加数据失败!')</script>");txtUserName.Text="";txtPwd.Text="";}else{cmd.CommandText="INSERTINTO管理员(账号,密码)VALUES(@username,@passwd)";intvar=cmd.ExecuteNonQuery();if(var>0){Response.Write("<script>alert('添加数据成功!')</script>");txtUserName.Text="";txtPwd.Text="";}conn.Close();}}}这是注册的那个按钮,怎么解决防止两个人同一时间同时注册一个账号
解决方案
解决方案二:
你可以把[账号]声明为primarykey。
解决方案三:
用程序和数据库实现随便你选啊说个简单的你在数据库建个唯一索引不就插不进去了
解决方案四:
存储过程,事务,都行总之你得保证查询和插入是在同一个过程里,避免出现脏数据
解决方案五:
同求同求,望大牛详细解答。。。。
解决方案六:
如果不考虑用户的体验,只是防止重复注册那么用楼上2位的办法当然是最简单的.当然这样一来你就无法区分到底是因为有其他用户抢先注册了账号导致插入失败,还是由于网络问题或数据库问题导致插入失败
解决方案七:
username增加唯一性约束
解决方案八:
引用6楼starfd的回复:
username增加唯一性约束
老师说不能设置约束用事务怎么做求解
解决方案九:
用事务?一定要?那就是建个存储过程,开始事务(这个要求表锁),先select有没有用户,没有才insert
解决方案十:
引用7楼u011147081的回复:
Quote: 引用6楼starfd的回复:
username增加唯一性约束老师说不能设置约束用事务怎么做求解
有详细点的代码吗?从来没写过事务
解决方案十一:
你把查询和新增放到一个事物里应该可以吧Beginselecttable有就Rollback没有就inserttableCommit这样应该可以吧
解决方案十二:
存储过程写个吧。不会?看书去。
解决方案十三:
1、在插入前先检查是否存在2、数据库底层用主键或唯一索引确保无脏数据进入
解决方案十四:
username增加唯一性约束代码层可以加lock防止多个线程同时操作
解决方案十五:
加上唯一主键吧