Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将查询结果链接到多个组合框_C#_Combobox_Oledb - Fatal编程技术网

C# 将查询结果链接到多个组合框

C# 将查询结果链接到多个组合框,c#,combobox,oledb,C#,Combobox,Oledb,我有几个相关的组合框,它们从不同的表中提取数据。它可以是选定值或查找值。例如,我将在框中显示文本名称,选中后,我需要查找相应的int ID,并在查询中使用该值填充下一个组合框 我在引用命令/查询结果和获取数据类型错误时遇到问题。错误是: SQL传递表达式。。。使用equals=具有不同数据类型的组件 注意:我的oledb接口不支持ICommandWithParameters // Get the ID (int) value - This works as I can convert the r

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

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

SQL传递表达式。。。使用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();
}

您将数字用撇号括起来,因此它被视为字符串文字

删除撇号

var tblRow3 =
    new OleDbCommand("select STATUS from Table2 where TABLE_ID = " + tblRow2 + ";", conn3);
更好的是,你的查询,这样你就不会遇到这样的错误

这是未经测试的,但类似的东西应该可以工作。您也可以指定参数的名称,但我认为使用OLEDB时,名称不如顺序重要

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

我已经回答了我的大部分问题,但我仍然有一个逻辑错误,即我的sql查询在应该返回的时候没有返回任何结果。再说一次,我对C语言很陌生,所以我可能没有正确的命名法,但这是我对问题/解决方案的理解。 OleDbCommand返回一个“object”,一个查询可以返回许多行和列,但我需要一个单数值,以便在后续查询中进行比较。。。因此,ExecuteScalar做到了这一点。一旦我有了一个好的值,我只需要将它转换为变量字符串或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

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

不确定第二组代码为什么没有正确显示。。。如果混淆,我可以重新发布+1,仅用于参数化查询。从文本框中获取输入并将其放入数据库查询是非常糟糕的。。。和…=+tblRow。。。没有分号。。。没有joy,但不同的SQL错误:错误:SQL passthru表达式包含以下错误:语法错误,应为以下错误之一..'='错误指向此行rdRow3=tblRow3.ExecuteReader;注意:我的oledb接口不支持ICommandWithParameters。。。因此,参数不是一个选项。