【问题标题】:Get value of combobox2 from combobox1从 combobox1 获取 combobox2 的值
【发布时间】:2012-11-18 14:17:52
【问题描述】:

我的表单上有 2 个组合框(在表单加载事件中)。表单加载后,第一个组合框从 select 语句中获取一个值。我想在我的第二个组合框中使用该值。这是我的代码:

1ste Combobox = cbDelivery

        OracleConnection conn = new OracleConnection();
        conn.ConnectionString = "User Id=christob;Password=CHRISTOB;Host=poseidon;Pooling=true;Min Pool    Size=0;Max Pool Size=100;Connection Lifetime=0;Port=1522;Sid=GLODCD";

        conn.Open();

        string query;
        query = "select distinct dd.delivery_bay_code from dc_delivery dd, dc_grv dg where delivery_complete_datetime is null and dd.dc_delivery_id_no = dg.dc_delivery_id_no and dd.delivery_announce_datetime is null";
        OracleCommand cmd = new OracleCommand(query, conn);
        OracleDataReader dr = cmd.ExecuteReader();
        while (dr.Read())
        {
            cbDelivery.Items.Add(dr["delivery_bay_code"]);
        }
        dr.Close();
        conn.Close();

2de Combobox = cbOrderNo

此组合框位于:

private void cbDelivery_SelectedIndexChanged(object sender, EventArgs e)

所以一旦我从第一个组合框中选择一个值,我的第二个组合框查询就必须填充第二个组合框。见代码:

        OracleConnection conn = new OracleConnection();
        conn.ConnectionString = "User Id=christob;Password=CHRISTOB;Host=poseidon;Pooling=true;Min Pool Size=0;Max Pool Size=100;Connection Lifetime=0;Port=1522;Sid=GLODCD";
        conn.Open();
        string query1;
        query1 = "select distinct dg.order_no from dc_delivery dd, dc_grv dg where delivery_complete_datetime is null and dd.dc_delivery_id_no = dg.dc_delivery_id_no and dd.delivery_announce_datetime is null and dd.delivery_bay_code = " + cbDelivery.Text;
        OracleCommand cmd1 = new OracleCommand(query1, conn);
        OracleDataReader dr1 = cmd1.ExecuteReader();
        while (dr1.Read())
        {
            cbOderNo.Items.Add(dr1["order_no"]);

        }
        dr1.Close();
        conn.Close();

请注意,我在第二个 Select 查询中使用了 cbDelivery 组合框。

问题是: 一旦我从我的第一个组合框中选择一个值,第二个组合框就会给出异常“”ORA-00904:“BAY1”:无效标识符。

请帮我解决这个问题或提出不同的方法。

提前致谢。

【问题讨论】:

  • 您是否尝试使用 cbDelivery.SelectedValue 而不是 cbDelivery.Text。此外,您的 sql 查询周围缺少单引号。所以这一行:query1 = "select distinct dg.order_no from dc_delivery dd, dc_grv dg where delivery_complete_datetime is null and dd.dc_delivery_id_no = dg.dc_delivery_id_no and dd.delivery_announce_datetime is null and dd.delivery_bay_code = '" + cbDelivery.Text + "' ";
  • @AzharKhorasany cbDelivery.SelectedValue 不这样做。 “'”也不起作用。不要认为查询有问题。在我的其他人中也是如此。
  • 在你的查询变量上放一个断点,看看你执行它时得到什么字符串。然后在 Oracle 数据库中运行该查询,看看是否可以得到任何结果?
  • @AzharKhorasany 是的,该查询在 Oracle 中有效。我在 OracleDataReader dr1 = cmd1.ExecuteReader(); -- ""ORA-00904: "BAY1": 标识符无效。
  • 看看这个。您的查询一定有问题:dba-oracle.com/t_ora_00904_string_invalid_identifier.htm

标签: c# visual-studio combobox


【解决方案1】:

可能是您的查询使用 sql 或 oracle 的某些关键字作为列名或在某个无效位置。在这种情况下,这种类型的错误是可能的。我不确定这个解决方案。但至少我们可以尝试一次。这样我们就可以确定它是否正确?

【讨论】:

    【解决方案2】:

    已修复!!我就是这样做的:

    private void populateDeliveryBayCodes()
        {
            conn.Open();
            string query;
            query = "select distinct dd.delivery_bay_code from dc_delivery dd, dc_grv dg where dd.delivery_complete_datetime is null and dd.dc_delivery_id_no = dg.dc_delivery_id_no and dd.delivery_announce_datetime is null";
            OracleCommand cmd = new OracleCommand(query, conn);
            OracleDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                cbDelivery.Items.Add(dr["delivery_bay_code"]);
            }
            dr.Close();
            conn.Close();
        }
    
        private void populateOrderNumbers()
        {
            conn.Open();
            string query;
            query = "select distinct dg.order_no from dc_delivery dd, dc_grv dg where dd.delivery_complete_datetime is null and dd.dc_delivery_id_no = dg.dc_delivery_id_no and dd.delivery_announce_datetime is null and dd.delivery_bay_code ='" + cbDelivery.Text + "' order by order_no";
            OracleCommand cmd = new OracleCommand(query, conn);
            OracleDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                cbOderNo.Items.Add(dr["order_no"]);
            }
            dr.Close();
            conn.Close();
        }
    

    private void frmBuiltPallet_Load(object sender, EventArgs e)
        {
            populateDeliveryBayCodes();
        {
    
    private void cbDelivery_SelectedIndexChanged(object sender, EventArgs e)
        {
            populateOrderNumbers();
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多