繁体   English   中英

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

[英]C# if certain text selected in combobox winform

我有3个组合框:cmbStatus,cmbReason,cmbTransfer,主键文本框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", "");
            }

之前感谢

为组合框而不是Text使用属性SelectedValue 如果cmbStatus.Text!=“ Transfered”,也将DBNull.Value或默认值分配给参数@Reason@Transfer

您可以将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);
}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM