簡體   English   中英

2個用戶以一種形式注冊C#winforms

[英]2 users registration in one form C# winforms

我想用player1 vs做游戲。 player2,需要先將它們注冊到數據庫。 我有一個包含每個用戶詳細信息的面板的表單和一個提交按鈕,因此當兩個用戶填寫其詳細信息時,他們將它們提交到同一表單中。 我在DB中有一個Users表,因此所有注冊用戶都應該在那兒。 但是,當我將其添加到數據庫表中時,出現了@username已經存在的異常(表中的所有參數都相同)。

是否可以將兩種用戶以一種形式注冊到一張桌子?

這是提交按鈕的代碼。 它適用於一個用戶。

private void submitBtn_Click(object sender, EventArgs e)
{
    if (registerValidation())
    {
        string conStr = ConfigurationManager.ConnectionStrings["BackgammonGame"].ConnectionString;
        SqlConnection con = new SqlConnection(conStr);
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        con.Open();

        cmd.CommandText = ("INSERT INTO Users (userName, firstName, lastName, address, addNum, city, phone, email) VALUES (@userName, @firstName, @lastName, @address, @addNum, @city, @phone, @email)");

        cmd.Parameters.Add("@userName", SqlDbType.NVarChar).Value = userNmTxt.Text;
        cmd.Parameters.Add("@firstName", SqlDbType.NVarChar).Value = firstNmTxt.Text;
        cmd.Parameters.Add("@lastName", SqlDbType.NVarChar).Value = lastNmTxt.Text;
        cmd.Parameters.Add("@address", SqlDbType.NVarChar).Value = streetTxt.Text;
        cmd.Parameters.Add("@addNum", SqlDbType.Int).Value = (string.IsNullOrWhiteSpace(stNumTxt.Text)) ? 0 : Int32.Parse(stNumTxt.Text);
        cmd.Parameters.Add("@city", SqlDbType.NVarChar).Value = cityTxt.Text;
        cmd.Parameters.Add("@phone", SqlDbType.Int).Value = (string.IsNullOrWhiteSpace(phoneNumTxt.Text)) ? 0 : Int32.Parse(phoneNumTxt.Text);
        cmd.Parameters.Add("@email", SqlDbType.NVarChar).Value = mailTxt.Text;

        cmd.ExecuteNonQuery();
        MessageBox.Show("User successfully created!");
        con.Close();
        Close();
        Form1.ActiveForm.Close();
    }
}

我懷疑您遇到的問題是您的按鈕單擊事件只是使用了與第一個玩家相關的相同文本框,然后為第二個玩家重用了它們(顯然仍然指向玩家一個)。

最好的想法是制作一個可以接受某些參數的方法,或者為面板創建一個用戶控件,然后將其添加到數據庫中。您仍然需要檢查是否存在用戶。

解決方案一

private void submitBtn_Click(object sender, EventArgs e)
{
    AddPlayerToDb("name","add"....);
    AddPlayerToDb("name2","add2"....);

//Inside method
cmd.Parameters.Add("@userName", SqlDbType.NVarChar).Value = param1;

解決方案二

private void submitBtn_Click(object sender, EventArgs e)
{
    userControl1.AddPlayerToDb(connection);
    userControl2.AddPlayerToDb(connection);

注意:我對SQL不太熟悉,因此我不知道它是否可以通過連接有效,或者您是否需要新的連接

我認為您應該在保存新表之前檢查用戶是否存在於數據表中。 比您可以更新用戶數據,覆蓋它或忽略新數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM