You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#多表查询问题:添加第二张表后查询返回空结果

问题分析与解决办法

你的代码出现空结果,核心问题和修正方案如下:

问题点

  • 多结果集无法用单个DataTable接收:你写了两个SELECT语句(多结果集查询),但DataTable只能存储一个查询结果,第二个表的数据根本没被填充到表里。如果第一个表没匹配到内容,就会显示空结果。
  • 无效的DataTable构造参数:DataTable的构造函数参数是单个表名,你传Uniclass2015_EF_v1_12; Uniclass2015_En_v1_26这种多表名组合完全不起作用。
  • 冗余参数:代码里添加了@code参数,但SQL语句中根本没用到它,属于多余代码。

修正方案

方案1:合并结果集(表结构一致时用)

如果两个表的字段结构完全相同(比如都有title等相同字段),可以用UNION ALL把两个表的查询结果合并成一个,用单个DataTable接收即可:

using (DataTable dt = new DataTable()) 
{
    using (SqlCommand cmd = new SqlCommand(@"
        SELECT * FROM Uniclass2015_En_v1_26 WHERE title LIKE @Title
        UNION ALL
        SELECT * FROM Uniclass2015_EF_v1_12 WHERE title LIKE @Title
    ", conn))
    {
        cmd.Parameters.AddWithValue("@Title", $"%{txtSearch.Text}%");

        SqlDataAdapter adapter = new SqlDataAdapter(cmd);
        adapter.Fill(dt);

        dataGridView1.DataSource = dt;
    }
}
conn.Close();

方案2:保留独立结果集(表结构不同时用)

如果两个表结构不一样,需要分别保留各自的结果,就用DataSet来存储多个DataTable:

using (DataSet ds = new DataSet()) 
{
    using (SqlCommand cmd = new SqlCommand(@"
        SELECT * FROM Uniclass2015_En_v1_26 WHERE title LIKE @Title;
        SELECT * FROM Uniclass2015_EF_v1_12 WHERE title LIKE @Title
    ", conn))
    {
        cmd.Parameters.AddWithValue("@Title", $"%{txtSearch.Text}%");

        SqlDataAdapter adapter = new SqlDataAdapter(cmd);
        // Fill会自动把多个结果集填充到DataSet的不同DataTable中
        adapter.Fill(ds);

        // 可选择显示第一个表或第二个表
        dataGridView1.DataSource = ds.Tables[0];
        // 或者切换显示第二个表:dataGridView1.DataSource = ds.Tables[1];
    }
}
conn.Close();

另外,你写的txtSearch_KeyPress事件代码没有问题,无需修改。

内容的提问来源于stack exchange,提问作者Eduard Szigeti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 03:25:15