Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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语言中从多个表的查询中检索数据_C#_Database_Winforms_Datagridview_Tableadapter - Fatal编程技术网

C# 在C语言中从多个表的查询中检索数据

C# 在C语言中从多个表的查询中检索数据,c#,database,winforms,datagridview,tableadapter,C#,Database,Winforms,Datagridview,Tableadapter,好的,我有一个C程序,我正在工作,当我试图查询我的数据库时遇到了一个问题 我有三个表不考虑名称,它们是针对这个问题的概括-客户、客户和订单 顾客 有一个名为custID的字段 命令 有一个名为orderID的字段 保管人 多对多关系-一个客户可以有多个订单,一个订单可以有多个客户 包含。。。 custID链接到CUSTOMER.custID orderID链接到ORDERS.orderID 基本上,我需要一种方法来输入custID,获取客户拥有的所有订单的列表,并将其显示在dataGridVie

好的,我有一个C程序,我正在工作,当我试图查询我的数据库时遇到了一个问题

我有三个表不考虑名称,它们是针对这个问题的概括-客户、客户和订单

顾客 有一个名为custID的字段 命令 有一个名为orderID的字段 保管人 多对多关系-一个客户可以有多个订单,一个订单可以有多个客户 包含。。。 custID链接到CUSTOMER.custID orderID链接到ORDERS.orderID 基本上,我需要一种方法来输入custID,获取客户拥有的所有订单的列表,并将其显示在dataGridView中

我试过的 我已尝试使用数据集设计器中的查询配置向导向不同的TableAdapter添加查询。这方面的主要问题是,当我尝试使用JOIN时,它会给我一个错误JOIN表达式not SUPPORED。JOIN是我知道如何使用SQL关联数据的唯一方法

我也尝试过手动添加代码,但我永远无法获得在dataGridView中显示的正确格式的信息。如果我能将所有与custID相关的orderID排列成一个数组,也许我就能在那里找到解决方案。我可以找出如何循环该信息,根据每个sibID进行查询,但是如何将所有这些信息编译成一个tableAdapter以显示在dataGridView中

老实说,任何有帮助的,如果你需要更多的信息,请告诉我

规格 IDE:Visual Studio Ultimate 2012 使用Microsoft Access 2010创建的数据库 语言:C 编辑 所以我把所有的东西都放进一个数组中,以后我可以解析它。仍然有一些错误,但也许这会让我更清楚地知道我在做什么。我得到的错误是,未能启用约束。一个或多个行包含违反非空、唯一或外键约束的值。我反复检查,没有任何内容为空,也没有任何内容重复。它可能是外键,但如何解决?这是密码

GetSelectedCustOrders接收一个客户ID,并查询客户ID是否匹配 从CUSTORD中选择orderID,其中custID=selectedCust DBDataSetTableAdapters.CUSTORDTableAdapter CUSTORDTableAdapter=新的DBDataSetTableAdapters.CUSTORDTableAdapter

编辑2 因此,我出现上述错误的原因是因为我试图更改表的模式。如果我将SQL查询语句更改为

从CUSTORD中选择*,其中custID=selectedCust


…然后它就完美地工作了!我在我的foreach中实现了一个索引,这样我就可以只选择orderID并将其附加到relationString中。现在只需解析信息,将其转换为int并对orderID的订单运行查询。

因此我决定不运行第二个查询。首先,我用整个订单表填充了我的DataGridView。将orderID放入逗号分隔的字符串后,我将它们拆分为一个数组。我关闭了DataGridView中的所有行,并对照sRelationArray中的所有orderID检查了该行的orderID。如果匹配的话,我就把这排重新打开。代码如下:

private void setOrderTable()
    {
        string relationString = getRelatedOrders(); //gives the comma delimited string
        string[] sRelationArray = relationString.Split(new[] {','}, System.StringSplitOptions.RemoveEmptyEntries);
        CurrencyManager currencyManager1 = (CurrencyManager)BindingContext[dataGridView1.DataSource];

        try
        {
            this.oRDERSTableAdapter.Fill(this.DBDataSet.ORDERS);
        }
        catch (System.Exception ex)
        {
            System.Windows.Forms.MessageBox.Show("Error finding orders. \n" + ex.Message);
        }

        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            currencyManager1.SuspendBinding();
            row.Visible = false;

            for (int i = 0; i < sRelationArray.Length; i++)
            {
                if (sRelationArray[i] == row.Cells[0].Value.ToString())
                {
                    row.Visible = true;
                }
            }
        }
        currencyManager1.ResumeBinding();
    }//end set orders table

如果您放弃访问权并迁移到真正的RDMSI,您会更加高兴,因为我明白这一点。有了我现在拥有的资源,我能做什么?现在我要把orderID排列成一个数组。
private void setOrderTable()
    {
        string relationString = getRelatedOrders(); //gives the comma delimited string
        string[] sRelationArray = relationString.Split(new[] {','}, System.StringSplitOptions.RemoveEmptyEntries);
        CurrencyManager currencyManager1 = (CurrencyManager)BindingContext[dataGridView1.DataSource];

        try
        {
            this.oRDERSTableAdapter.Fill(this.DBDataSet.ORDERS);
        }
        catch (System.Exception ex)
        {
            System.Windows.Forms.MessageBox.Show("Error finding orders. \n" + ex.Message);
        }

        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            currencyManager1.SuspendBinding();
            row.Visible = false;

            for (int i = 0; i < sRelationArray.Length; i++)
            {
                if (sRelationArray[i] == row.Cells[0].Value.ToString())
                {
                    row.Visible = true;
                }
            }
        }
        currencyManager1.ResumeBinding();
    }//end set orders table