2013-09-22 2 views
1

C#에서 ".Union"을 사용하여 두 개의 독립적 인 테이블을 성공적으로 조인 할 수없고 모눈의 모든 열을 표시 할 수 없습니다. 누군가 내가 이것을 해결할 수있는 방법을 말해 줄 수 있습니까?UNION을 C에서 사용하는 방법 #

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 '%'[email protected]+'%'", conn); 
    cmd1.Parameters.AddWithValue("@studentFirstName", input1); 
    cmd2 = new SqlCommand("select * from employee where empFirstName LIKE '%'[email protected]+'%'", conn); 
    cmd2.Parameters.AddWithValue("@empFirstName", input2); 
    cmd = ((cmd1) .Union (cmd2)); 
} 

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

복잡한 쿼리를 작성하려면 저장 프로 시저를 만드는 것이 좋습니다. –

+0

왜'유니언 (Union) '이 효과가있을 것으로 기대하십니까? 두 집합이 형식 호환 가능할 것으로 기대하는 집합 연산입니다 (동일한 수의 열, 각 열은 순서대로 동일 형식이어야 함). 그것에 관해서는 C#에서 실패 - 나는 SQL뿐만 아니라 직접 실패 기대하고있다. – Oded

+2

기본으로 돌아가서 어떤 수업에서 기존 방법이 아닌 것을 호출 할 수없는 이유를 이해하는 것이 좋습니다. 이것은 코드가 작동하기를 바랄 정도로 밀려 났던 것처럼 보입니다. – usr

답변

3

SqlCommand에는 union 메서드가 없습니다. 하지만 당신은 하나 개의 데이터 세트에 Fill() 방법을 여러 번 호출 할 수 있습니다

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를 정의 할 수 있으며 두 번째 채우기의 레코드는 첫 번째 채우기의 레코드를 동일한 기본 키로 덮어 씁니다.
+0

''Fill '을 여러 번 호출하는 것은 UNION이 아닌 SQL에서 UNION ALL을 수행하는 것과 같습니다. –

+0

@ScottChamberlain 예, 대답을 변경하겠습니다. –

0

두 테이블 모두 Union에서 생각하는 동일한 이름의 동일한 수의 열을 반환해야합니다. 다음과 같은 쿼리가 작동 할 수 있습니다.

관련 문제