0

player1 対でゲームをしたいです。player2 であり、最初にそれらを DB に登録する必要があります。各ユーザーの詳細用のパネルと 1 つの送信ボタンを備えた 1 つのフォームがあるため、2 人のユーザーが詳細を入力すると、同じフォームで送信されます。DBにUsersテーブルが1つあるので、登録済みのすべてのユーザーがそこにいるはずです。しかし、DBテーブルに追加すると、@usernameが既に存在するという例外が発生します(テーブル内のすべてのパラメーターについても同じです)。

1つのフォームに2人のユーザーを1つのテーブルに登録することはできますか?

これは送信ボタンのコードです。それは1人のユーザーのために働きます..

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

あなたが抱えている問題は、ボタンクリックイベントが最初のプレーヤーに関連する同じテキストボックスを使用していて、2 番目のプレーヤー (明らかにまだプレーヤー 1 を指している) にこれらを再利用していることだと思います。

最良のアイデアは、いくつかのパラメーターを受け取るメソッドを作成するか、db に追加するために使用できるパネルのユーザー コントロールを作成することです。ただし、存在するユーザーを確認する必要があります。

ソリューション 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;

解決策 2

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

私はSQLにあまり詳しくないので、接続を渡すのが有効かどうか、または新しい接続が必要かどうかはわかりません

于 2013-07-26T07:11:08.570 に答える