C#如果在组合框winform中选择了某些文本

时间:2016-08-12 05:12:04

标签: c# mysql winforms combobox

我有3个组合框:cmbStatus,cmbReason,cmbTransfer,primarykey textbox txtNo_RM和触发按钮:btnAdd。使用Mysql作为数据库

虽然cmbStatus!=“已转移”cmbReason和cmbTransfer将不会被用户选中。问题是,当我使用此代码时,它无法正常工作

private void btnAdd_Click(object sender, EventArgs e)
{
    MySqlConnection con = new MySqlConnection(MyConnectionString);
    MySqlCommand cmd;
    con.Open();
    try
    {
        cmd = con.CreateCommand();
        cmd.CommandText = "Insert Into tb_data(No_RM,Status,Reason,Transfer)Values(@No_RM,@Status,@Reason,@Transfer)";
        cmd.Parameters.AddWithValue("@NO_RM", txtNo_Rm.Text);
        cmd.Parameters.AddWithValue("@Status", cmbStatus.Text);

        if (cmbStatus.Text == "Transfered")
        {
            cmd.Parameters.AddWithValue("@Reason", cmbReason.Text);
            cmd.Parameters.AddWithValue("@Transfer", cmbTransfer.Text);
        }
        cmd.ExecuteNonQuery();


    }
    finally
    {
        if (con.State == ConnectionState.Open)
        {
            con.Close();
            LoadData();
            MessageBox.Show("Data Added!");
        }
    }



}

上面的代码导致致命的错误消息,并使用SelectedText.ToString

尝试添加此代码,导致超出范围错误

if (cmbStatus.Text != "Transfered")
            {
                cmd.Parameters.AddWithValue("@Reason", "");
                cmd.Parameters.AddWithValue("@Transfer", "");
            }

之前感谢

3 个答案:

答案 0 :(得分:0)

将属性SelectedValue用于组合框而不是Text。如果cmbStatus.Text!=“已转移”,还可以为参数DBNull.Value@Reason分配@Transfer或默认值。

答案 1 :(得分:0)

您可以将DBValue.Null用于以下空值:

if (cmbStatus.Text == "Transfered")
{
   cmd.Parameters.AddWithValue("@Reason", cmbReason.Text);
   cmd.Parameters.AddWithValue("@Transfer", cmbTransfer.Text);
}
else
{
   cmd.Parameters.AddWithValue("@Reason", DBNull.Value);
   cmd.Parameters.AddWithValue("@Transfer", DBNull.Value);
}

答案 2 :(得分:0)

考虑您正在使用的参数化查询,它期望您在查询中指定的四个参数所以您应该五个四个,否则您将得到问题中描述的错误;在这种情况下你可以做的是:

cmd = con.CreateCommand();
if (cmbStatus.Text == "Transfered")
{
    cmd.CommandText = "Insert Into tb_data(No_RM,Status,Reason,Transfer)Values(@No_RM,@Status,@Reason,@Transfer)";      
    cmd.Parameters.AddWithValue("@Reason", cmbReason.Text);
    cmd.Parameters.AddWithValue("@Transfer", cmbTransfer.Text);
}
else
{
    cmd.CommandText = "Insert Into tb_data(No_RM,Status)Values(@No_RM,@Status)";         
}
cmd.Parameters.AddWithValue("@NO_RM", txtNo_Rm.Text);
cmd.Parameters.AddWithValue("@Status", cmbStatus.Text);
cmd.ExecuteNonQuery();
相关问题