0

我想和 player1 Vs 做一个游戏。player2 并且需要先将它们注册到 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();
    }
}
4

2 回答 2

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 不太熟悉,所以我不知道它是否可以通过连接或者您是否需要新连接

于 2013-07-26T07:11:08.570 回答
0

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

于 2013-07-26T06:52:35.217 回答