【问题标题】:Executing a query i got Two different results PhpMyAdmin and C#执行查询我得到了两个不同的结果 PhpMyAdmin 和 C#
【发布时间】:2020-04-01 07:56:41
【问题描述】:

您好,如果我在 PhpMyAdmin 中执行以下查询,我有 5 个结果。 如果我对 C# 执行完全查询,我只会返回 1 个结果。
我已经在桌子上敲了 2 天,但我找不到解决方案。 有什么想法吗?

SELECT 
tbl_orders.Data_payment,
tbl_customers.City,
tbl_customers.Country,
tbl_orders.Price,
tbl_orders.state_order,
tbl_products.Product_ID,
tbl_products.Name
FROM
tbl_orders
    INNER JOIN
tbl_customers ON tbl_orders.fk_customer_id = tbl_customers.Customer_ID
    INNER JOIN
tbl_products ON tbl_orders.fk_product_id = tbl_products.Product_ID
WHERE
tbl_products.Product_ID = '2'
    AND tbl_customers.Country = 'Russia'
    AND tbl_orders.Data_payment BETWEEN '2019-04-01' AND '2020-04-01'



        private void test_load(string query)
    { DataTable dt = new DataTable();
        try
        {
            using (MySqlConnection conn = new MySqlConnection(MyConString))
            {
                using (MySqlCommand cmd = new MySqlCommand(query, conn))
                {
                    conn.Open();
                    using (MySqlDataReader dr = cmd.ExecuteReader())    
                    {               
                        dt.Load(dr);
                        MessageBox.Show(dt.Rows.Count.ToString());
                        dataGridView1.DataSource = dt;
                    }
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("err test_load " + ex);
        }
    }

【问题讨论】:

  • 你怎么知道查询是一样的?尝试调试或将其输出到消息框以确保您使用相同的 WHERE 子句。你得到“1”作为 dt.Rows.Count 吗?

标签: c# mysql sql visual-studio phpmyadmin


【解决方案1】:

添加数据库并测试你提供的代码后,我发现我仍然

无法重现您的问题。我可以在 sql-query 和 c# 代码中得到相同的结果。

可以看到下图。

我也测试过,发现和你的图片不一样。

【讨论】:

  • 嗨,杰克,首先感谢您的帮助。我正在准备一个干净的数据库和 c# 程序,然后我将分享。
  • 所以在这里你可以找到项目的链接和 DB yadi.sk/d/k4QXKjWzCTA5RQ 看看图像是显示我选择作为过滤器的内容。
  • 我测试过,我觉得没问题。
  • 我不知道我的测试中发生了什么,如果使用 c# 执行,我总是只得到一个结果,如果我使用 PhpmyAdmin 或 Mysql Workbench,我总是得到一个以上的结果。我还应该说我使用 MariaDB 10 作为数据库版本 -> 10.3.21-MariaDB 和 Connector/NET MySql.Data.MySqlClient .Net 8.0.19
  • 我保留相同的数据,但我将服务器类型:从 MariaDB 更改为 MySQL 版本:5.6.35,我还将连接器 MySql.Data.MySqlClient 从 8.0.19 更改为 6.10.9 但仍然当它们应该是 2 时只得到一个结果
【解决方案2】:

好的,我终于解决了这个问题。

这段代码在不工作时只返回一行,应该返回不止一行。

        private DataTable test2_load(string query)
    {
        DataTable dt = new DataTable();
        try
        {
            using (MySqlConnection conn = new MySqlConnection(MyConString))
            {
                using (MySqlCommand cmd = new MySqlCommand(query, conn))
                {
                    conn.Open();
                    using (MySqlDataReader data_reader = cmd.ExecuteReader())
                    {                     
                        dt.Load(data_reader);
                    }
                }               
            }
            return dt;
        }
        catch (Exception ex)
        {
            MessageBox.Show("err test_load " + ex);
            return null;
        }
    }

这是有效的。它返回正确的行数

        private void test3_load(string query)
    {
        MySqlConnection mysqlCon = new

         MySqlConnection(MyConString);
        mysqlCon.Open();

        MySqlDataAdapter MyDA = new MySqlDataAdapter();

        MyDA.SelectCommand = new MySqlCommand(query, mysqlCon);

        DataTable table = new DataTable();
        MyDA.Fill(table);

        BindingSource bSource = new BindingSource();
        bSource.DataSource = table;

        dataGridView1.DataSource = bSource;
    }

【讨论】:

    猜你喜欢
    • 2016-02-08
    • 2021-11-13
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    相关资源
    最近更新 更多