2个用户以一种形式注册C#winforms

时间:2013-07-26 06:43:09

标签: c# forms registration

我想用player1与玩家进行游戏。 player2并需要先将它们注册到DB。 我有一个表格,每个用户的详细信息和一个提交按钮,所以当两个用户填写他们的详细信息时,他们以相同的形式提交。 我在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();
    }
}

2 个答案:

答案 0 :(得分:1)

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

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

解决方案一

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

答案 1 :(得分:0)

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