如何在访问数据库中插入选中的复选框值
本文关键字:复选框 插入 访问 数据库 | 更新日期: 2023-09-27 18:19:15
OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:'Users'jay.desai'Documents'Visual Studio 2008'Projects'Test'Test'Test.mdb");
con.Open();
OleDbCommand cmd = new OleDbCommand("insert into EmpTest values(@Emp_No,@Gender,@Language)", con);
cmd.Parameters.AddWithValue("@Emp_No", textBox1.Text);
if (radioButton1.Checked)
{
cmd.Parameters.AddWithValue("@Gender", radioButton1.Text);
}
else
{
cmd.Parameters.AddWithValue("@Gender", radioButton2.Text);
}
if (checkBox1.Checked)
{
cmd.Parameters.AddWithValue("@Language", checkBox1.Text);
}
if (checkBox2.Checked)
{
cmd.Parameters.AddWithValue("@Language", checkBox2.Text);
}
if (checkBox3.Checked)
{
cmd.Parameters.AddWithValue("@Language", checkBox3.Text);
}
if (checkBox4.Checked)
{
cmd.Parameters.AddWithValue("@Language", checkBox4.Text);
}
cmd.ExecuteNonQuery();
con.Close();
当我点击提交按钮时,只有第一个选中的复选框值插入数据库??
如果需要将选中的所有语言写入数据库,则需要用选中的复选框的累积文本构建一个字符串。
using(OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:'Users'jay.desai'Documents'Visual Studio 2008'Projects'Test'Test'Test.mdb"))
using(OleDbCommand cmd = new OleDbCommand("insert into EmpTest values(@Emp_No,@Gender,@Language)", con))
{
con.Open();
cmd.Parameters.AddWithValue("@Emp_No", textBox1.Text);
cmd.Parameters.AddWithValue("@Gender", GetGender());
cmd.Parameters.AddWithValue("@Language", GetLanguages());
cmd.ExecuteNonQuery();
}
private string GetLanguage()
{
StringBuilder result = new StringBuilder();
if (checkBox1.Checked)
result.AppendFormat("{0},", checkBox1.Text);
if (checkBox2.Checked)
result.AppendFormat("{0},", checkBox2.Text);
if (checkBox3.Checked)
result.AppendFormat("{0},", checkBox3.Text);
if (checkBox4.Checked)
result.AppendFormat("{0},", checkBox4.Text);
if(result.Length > 0) result.Lenght--;
return result.ToString();
}
private string GetGender()
{
return (radioButton1.Checked ? radioButton1.Text : radioButton2.Text);
}
相反,如果你只需要一种语言,那么你应该删除你的复选框控件,并使用单选按钮专用的一组控件,就像你对Gender字段所做的那样
这是因为当多个复选框被选中时,您覆盖了@Language
的早期值:
cmd.Parameters.AddWithValue("@Emp_No", textBox1.Text);
if (radioButton1.Checked)
{
cmd.Parameters.AddWithValue("@Gender", radioButton1.Text);
}
else
{
cmd.Parameters.AddWithValue("@Gender", radioButton2.Text);
}
string languages = new List<string>();
if (checkBox1.Checked)
{
languages.Add(checkBox1.Text);
}
if (checkBox2.Checked)
{
languages.Add(checkBox2.Text);
}
if (checkBox3.Checked)
{
languages.Add(checkBox3.Text);
}
if (checkBox4.Checked)
{
languages.Add(checkBox4.Text);
}
cmd.Parameters.AddWithValue("@Language", string.Join(",", languages.ToArray());
cmd.ExecuteNonQuery();
con.Close();
这将插入所有被选中的语言,以逗号分隔。
您正在将值添加到相同的DB参数@Language
。如果您希望将它们全部添加到数据库中,请为每个复选框创建单独的字段/参数。
同样,假设您选中了所有四个复选框,我希望插入的是最后一个复选框的值,而不是第一个。
但是,从外观上看,您想要将每个复选框的文本值连接在被选中的位置吗?
你可以通过:
StringBuilder sb = new StringBuilder();
if (checkBox1.Checked)
{
sb.Append(checkBox1.Text);
}
if (checkBox2.Checked)
{
sb.Append(checkBox2.Text);
}
if (checkBox3.Checked)
{
sb.Append(checkBox3.Text);
}
if (checkBox4.Checked)
{
sb.Append(checkBox4.Text);
}
cmd.Parameters.AddWithValue("@Language", sb.ToString());