C# 带占位符c的SQL表联接

C# 带占位符c的SQL表联接,c#,sql,C#,Sql,我想知道是否有人能帮我。我正在尝试用sql语句填充组合框。我能够做到这一点,然后我想根据第一个组合框的占位符填充下一个组合框,并且我必须为SQL命令将表连接在一起。我希望这是有道理的。这是我的代码,如果有人能提供帮助,我们将不胜感激 对于第一个组合框 private void btn_Customer_Click(object sender, EventArgs e) { conn = new OleDbConnection(conString); string sqlcommand =

我想知道是否有人能帮我。我正在尝试用sql语句填充组合框。我能够做到这一点,然后我想根据第一个组合框的占位符填充下一个组合框,并且我必须为SQL命令将表连接在一起。我希望这是有道理的。这是我的代码,如果有人能提供帮助,我们将不胜感激

对于第一个组合框

private void btn_Customer_Click(object sender, EventArgs e)
{
  conn = new OleDbConnection(conString);
  string sqlcommand = @"SELECT custid, title + "" "" + firstname + "" ""+ lastname as name FROM Customer;";

  daItems = new OleDbDataAdapter(sqlcommand, conn);
  daItems.Fill(dtItems);

  cmbo_Customer.DataSource = dtItems;
  cmbo_Customer.DisplayMember = "name";
  cmbo_Customer.ValueMember = "custid";
  cmbo_Customer.SelectedIndex = -1;
}
现在我想基于custID占位符填充下面的组合框

private void btn_ISA_Click(object sender, EventArgs e)
{
  try
  {
    OleDbCommand dbcmd = conn.CreateCommand();
    dbcmd.CommandText = @"SELECT name FROM account INNER JOIN product ON account.prodid = product.prodid ;";

    dbcmd.Parameters.AddWithValue("name", cmbo_ISA.SelectedValue);

  }
  catch (Exception ex)
  {
    // write exception info to log or anything else
    MessageBox.Show("Error occured!");
  }
}

根据评论,您的第二个查询:

SELECT p.name 
FROM account a
  INNER JOIN product p ON a.prodid = p.prodid 
为表名使用别名以便于消除歧义,需要:

SELECT p.name 
FROM account a
  INNER JOIN product p ON a.prodid = p.prodid 
WHERE a.custId = @custId
其中@custId是添加到OleDbCommand的参数的占位符

但是SQL中参数的语法@name依赖于数据库引擎,例如SQL Server使用@name,而Oracle使用?并依赖于参数1的顺序,但您尚未指定要针对的数据库引擎


1自我上次使用Oracle以来的十多年中,Oracle可能已经改变了这一点。

如果CustId仅出现在Customers表中,那么您需要将其包含在join中。但是,如果不了解您的模式,就无法确定具体的模式。让查询在代码之外工作使用数据库工具。我也试过这个,这个行吗?conn=新的OLEDB连接构造;字符串sqlcommand=@SELECT name FROM account.prodid=product.prodid上的帐户内部联接产品,其中custid=@custid;;daISA=新的OleDbDataAdaptersqlcommand,conn;黛莎·菲尔迪萨;cmbo_Customer.DataSource=dtISA;cmbo_Customer.DisplayMember=名称;cmbo_Customer.ValueMember=客户ID;cmbo_Customer.SelectedIndex=-1;请不要在评论中添加代码,而是编辑您的问题。与其问它是否有效,不如测试它是否有效?如果它不起作用,那么您可以提供有关它不起作用原因的更多详细信息。哦,对不起,这是我第一次使用它。custID显示在customer and account表中。但是,我希望在组合框中显示的是产品表中的名称,此外,如果在第一个组合框中用户选择了customer 1,则在下一个组合框中,我希望它显示客户拥有的产品的名称。但我在加入时遇到了问题,因为custid出现在customer和account表中。然后通过account and product表中的prodid链接到产品名称。对不起,我很困惑!抱歉,我的目标是Access数据库。但我已经设置了OLDECONNECTIONS等。无论如何,感谢您的帮助,我现在将尝试实现它。谢天谢地,它不会产生错误消息,但是组合框是空的。我已经填充了第一个组合框,但下一个组合框中没有显示任何内容。