2

我无法在 C# 中使用“.Union”成功连接两个独立的表并在网格中显示所有列。有人可以告诉我如何解决这个问题吗?

SqlCommand cmd;
SqlCommand cmd1;
SqlCommand cmd2;

string cstr = ConfigurationManager.ConnectionStrings["college"]
                                  .ConnectionString;

using (SqlConnection conn = new SqlConnection(cstr))
{
    cmd1 = new SqlCommand("select * from student where studentFirstName LIKE '%'+@studentFirstName+'%'", conn);
    cmd1.Parameters.AddWithValue("@studentFirstName", input1);
    cmd2 = new SqlCommand("select * from employee where empFirstName LIKE '%'+@empFirstName+'%'", conn);
    cmd2.Parameters.AddWithValue("@empFirstName", input2);
    cmd = ((cmd1) .Union (cmd2));
}

SqlDataAdapter dAdapt = new SqlDataAdapter(cmd);
DataSet dSet = new DataSet();
dAdapt.Fill(dSet);
4

2 回答 2

4

没有union办法SqlCommandFill()但是您可以在一个数据集上多次调用方法:

DataSet dSet = new DataSet();
SqlDataAdapter dAdapt1 = new SqlDataAdapter(cmd1);
dAdapt1.Fill(dSet);
SqlDataAdapter dAdapt2 = new SqlDataAdapter(cmd2);
dAdapt2.Fill(dSet);

也许您可以考虑创建存储过程来在服务器级别进行联合。

2点需要注意:

  • Fill()多次调用相当于UNION ALL(简单UNION消除重复);
  • 您可以在数据集中的表上定义 PRIMARY KEY,第二次填充的记录将用相同的主键覆盖第一次填充的记录。
于 2013-09-22T17:00:00.107 回答
-1

我认为这两个表都应该在 Union 中返回相同数量的同名列。如下查询可能有效:

SELECT StudentName As Name FROM Students WHERE StudentName LIKE 'abc%'
UNION
SELECT EmployeeName As Name FROM Employees WHERE EmployeeName LIKE 'abc%'
于 2013-09-23T15:26:34.213 回答