两个用户在一个表单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();
}
}
我怀疑您遇到的问题是,您的按钮点击事件只是使用与第一个玩家相关的相同文本框,然后为第二个玩家重复使用这些文本框(显然仍然指向玩家一)。
你最好的想法是制作一个可以接受一些参数的方法,或者为你的面板创建一个用户控件,用来添加到数据库中。。不过,您仍然需要检查存在的用户。
解决方案一
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不太熟悉,所以我不知道传递连接是否有效,或者是否需要新的连接
我认为在保存新的数据表之前,应该检查用户是否存在于数据表中。然后您可以更新用户数据,覆盖它或忽略新数据。