C# 将查询结果链接到多个组合框
我有几个相关的组合框,它们从不同的表中提取数据。它可以是选定值或查找值。例如,我将在框中显示文本名称,选中后,我需要查找相应的int ID,并在查询中使用该值填充下一个组合框 我在引用命令/查询结果和获取数据类型错误时遇到问题。错误是: SQL传递表达式。。。使用equals=具有不同数据类型的组件 注意:我的oledb接口不支持ICommandWithParametersC# 将查询结果链接到多个组合框,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
// 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。。。因此,参数不是一个选项。