链查询结果到多个组合框

时间:2016-01-30 00:17:58

标签: c# combobox oledb

我有几个从属组合框(CB)从不同的表中提取数据。它可以是选定值或查找值。例如,我将在框中显示文本(Name),选中后,我需要查找相应的int(ID)并在查询中使用该值来填充下一个组合框。

我在引用命令/查询结果和获取数据类型错误时遇到问题。错误是:

  

SQL passthru表达式...使用equals(=)具有不同数据类型的组件。

注意:我的oledb界面不支持ICommandWithParameters

// Get the ID (int) value - This works as I can convert the return value to a string and echo back to the screen
OleDbCommand tblRow2 = new OleDbCommand("select ID from Table1 where NM=  '"+ CB1.Text +"' ;" , conn3);
try
{
    conn3.Open();
    string r2 = Convert.ToString(tblRow2.ExecuteScalar());
    MessageBox.Show(r2);
    labelTableID.Text = "ID Code= " + r2;
    conn3.Close();
}
catch (Exception ex2)
{
    MessageBox.Show("Error " + ex2);
}

// Pass the ID (int) value and populate the next combo box CB2
// This doesn't work and throws the data type mismatch error
OleDbCommand tblRow3 = new OleDbCommand("select STATUS from Table2 where TABLE_ID = '"+ tblRow2 +"'; ",conn3);
OleDbDataReader rdRow3;
try
{
    conn3.Open();
    rdRow3 = tblRow3.ExecuteReader();
    while (rdRow3.Read())
    {
        CB2.Items.Add(rdRow3.GetString(0));
    }
    conn3.Close();
}

3 个答案:

答案 0 :(得分:1)

你用撇号围绕你的数字,所以它被视为字符串文字。

删除撇号。

var tblRow3 =
    new OleDbCommand("select STATUS from Table2 where TABLE_ID = " + tblRow2 + ";", conn3);

更好的是,parameterize您的查询,这样您就不会遇到这样的错误。

这是未经测试的,但这样的事情应该有效。您也可以指定参数的名称,但我不认为该名称与OLED的订单一样重要。

using (var cmd = new OleDbCommand("select STATUS from Table2 where TABLE_ID = ?", conn3))
{
  cmd.Parameters.Add(new OleDbParameter {OleDbType = OleDbType.Integer, Value = tblRow2});
}

答案 1 :(得分:0)

我已经回答了我的大多数问题,而且我还有一个逻辑错误,即我的SQL查询在应该没有任何结果时也没有。我再次对C#很陌生,所以我可能没有正确的命名法,但这是我对问题/解决方案的理解。   OleDbCommand返回一个'对象',查询可以返回多行&列,但我需要在后续查询中进行比较的奇异值...因此ExecuteScalar()可以解决这个问题。一旦我有了一个好的值,我只需要将它转换为变量(string或int)并在下一个查询中正确嵌入。所以一切都在“工作”。 (没有错误),我已经验证了每个查询的结果,所以我知道它们是正确的...但是我没有从最后一个命令/查询(tblRow3a)获得任何结果。有任何想法吗?谢谢@

                        MessageBox.Show(CB1.Text);

        string conn3str = <connection string>;
        OleDbConnection conn3 = new OleDbConnection(conn3str);

        // Get the ID (int) value
        OleDbCommand tblRow2 = new OleDbCommand();
        tblRow2.Connection = conn3;
        tblRow2.CommandText = "select ID from Table1 where NM=  ' " + CB1.Text +" ' ;" ;

        conn3.Open();

        // Convert & Pass the command result (tblRow2) to string (info only) & int (for next query) 

        string r2 = Convert.ToString(tblRow2.ExecuteScalar());
        Label_1.Text = "ID Code= " + r2;

        int r2i = Convert.ToInt32(tblRow2.ExecuteScalar());

        // Select STATUS (string) where TABLE_ID (int) = ID (int)
        OleDbCommand tblRow3 = new OleDbCommand();
        tblRow3.Connection = conn3;
        tblRow3.CommandText = "select STATUS from Table2 where TABLE_ID = " + r2i;

        // Convert and Pass command result (tblRow3) to string for next query
        // Where CODE (string) = r3 (string) 
        string r3 = Convert.ToString(tblRow3.ExecuteScalar());
        Label_2.Text = "Current Status = " + r3;

        OleDbCommand tblRow3a = new OleDbCommand();
        tblRow3a.Connection = conn3;
        tblRow3a.CommandText = "select ORDER from Table3 where CODE =  ' " + r3 + " ' ;" ;

        string r3a = Convert.ToString(tblRow3a.ExecuteScalar());
        lblInvCd.Text = "Order = " + r3a;
        MessageBox.Show(r3a);
        // Result is empty even through this same query returns results in the database

答案 2 :(得分:0)

我发现了问题,它实际上没什么,即空格。  坏:'“+ var +”'好:'“+ var +”'所有查询现在都正常工作。