两个用户在一个表单C#winforms中注册

本文关键字:表单 注册 C#winforms 一个 两个 用户 | 更新日期: 2023-09-27 18:24:57

我想用player1和player2做一个游戏,需要先将它们注册到DB。我有一个表格,每个用户的详细信息都有一个面板和一个提交按钮,所以当两个用户填写他们的详细信息时,他们会在同一个表格中提交。我在DB中有一个Users表,所以所有注册的用户都应该在那里。但当我把它添加到DB表中时,我得到的异常是@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();
    }
}

两个用户在一个表单C#winforms中注册

我怀疑您遇到的问题是,您的按钮点击事件只是使用与第一个玩家相关的相同文本框,然后为第二个玩家重复使用这些文本框(显然仍然指向玩家一)。

你最好的想法是制作一个可以接受一些参数的方法,或者为你的面板创建一个用户控件,用来添加到数据库中。。不过,您仍然需要检查存在的用户。

解决方案一

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不太熟悉,所以我不知道传递连接是否有效,或者是否需要新的连接

我认为在保存新的数据表之前,应该检查用户是否存在于数据表中。然后您可以更新用户数据,覆盖它或忽略新数据。