新手求解答怎么防止兩個人同一時間同時注冊一個賬號


 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();






        }
    }
}

這是注冊的那個按鈕,怎么解決防止兩個人 同一時間同時注冊一個賬號

14 个解决方案

#1


你可以把 [賬號] 聲明為 primary key。

#2


用程序和數據庫實現 隨便你選啊
說個簡單的你在數據庫建個唯一索引不就插不進去了

#3


存儲過程,事務,都行
總之你得保證查詢和插入是在同一個過程里,避免出現臟數據

#4


同求同求,望大牛詳細解答。。。。

#5


如果不考慮用戶的體驗,只是防止重復注冊
那么用樓上2位的辦法當然是最簡單的.
當然這樣一來你就無法區分到底是因為有其他用戶搶先注冊了賬號導致插入失敗,還是由於網絡問題或數據庫問題導致插入失敗

#6


username增加唯一性約束

#7


引用 6 樓 starfd 的回復:
username增加唯一性約束



老師說不能設置約束用事務怎么做求解

#8


用事務?一定要?
那就是建個存儲過程,開始事務(這個要求表鎖),先select有沒有用戶,沒有才insert

#9


引用 7 樓 u011147081 的回復:
Quote: 引用 6 樓 starfd 的回復:

username增加唯一性約束



老師說不能設置約束用事務怎么做求解


有詳細點的代碼嗎?從來沒寫過事務

#10


你把查詢和新增放到一個事物里  應該可以吧
Begin
    select table
    有 就  Rollback
    沒有 就
    insert table
Commit
這樣應該可以吧

#11


存儲過程寫個吧。不會?看書去。

#12


1、在插入前先檢查是否存在
2、數據庫底層用主鍵或唯一索引確保無臟數據進入

#13


username增加唯一性約束
代碼層 可以加 lock 防止多個線程同時操作

#14


加上唯一主鍵吧

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com