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

本文关键字:选择 文本 winform 如果 组合 | 更新日期: 2023-09-27 18:01:59

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

当cmbStatus != "Transfered"时,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", "");
            }

谢谢之前

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

您可以像这样使用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);
}

使用SelectedValue属性代替Text。也分配DBNull.Value或默认值给参数@Reason@Transfer,如果cmbStatus。= " transfer ".

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

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