【问题标题】:C# if certain text selected in combobox winformC# 如果在组合框 winform 中选择了某些文本
【发布时间】:2016-12-19 00:27:24
【问题描述】:

我有 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# mysql winforms combobox


    【解决方案1】:

    对组合框使用属性SelectedValue 而不是Text。如果 cmbStatus.Text != "Transfered",则还要为参数 @Reason@Transfer 分配 DBNull.Value 或默认值。

    【讨论】:

    • 虽然将属性更改为 SelectedValue 也可以,但在停止调试后我收到警告:可能意外的参考比较;要进行值比较,请将左侧类型转换为“字符串”
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 虽然我想尝试这段代码,但下面提供了一个简单的答案。但无论如何感谢您的回答
      猜你喜欢
      • 2018-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 2016-10-04
      • 2021-12-26
      相关资源
      最近更新 更多