1
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();

当我点击提交按钮时,只有第一个选中的复选框值插入数据库?

4

3 回答 3

0

您正在将值添加到相同的 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());
于 2013-06-21T09:21:46.833 回答
0

@Language发生这种情况是因为您在选中超过 1 个复选框时覆盖了之前的值:

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();

这将插入用逗号分隔的所有选中的语言。

于 2013-06-21T09:24:50.290 回答
0

如果您需要将选中的所有语言写入数据库,则需要构建一个带有选中复选框的累积文本的字符串。

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);
}

相反,如果您只需要一种语言,那么您应该删除您的复选框控件并使用单选按钮专有的一组控件,就像您在“性别”字段中所做的那样

于 2013-06-21T09:27:52.137 回答