2013-07-21 5 views
0

다음 코드는 단일 DataSet에서 작동하지만 DataSet 배열로 처리하려고하면 SqlDataAdapter.Fill()이 작동하지 않습니다. 기본적으로 내가 뭘하려고 오전 6 개의 서로 다른 데이터베이스를 연결하고 그들에 동일한 SQL 쿼리를 실행하고 함께 모든 데이터를 수집하고 단일 데이터 그리드보기에서 6 dbs에서 전체 데이터를 보여줍니다. 그것을하는 방법? 문제는 데이터 어댑터에서 mySet[j]을 채우기하지만 finSetsetArray[j]을 병합한다는 것이다처럼 감사합니다,여러 데이터베이스에서 데이터를 수집하고 단일 DataGridview에서 바인딩하는 방법은 무엇입니까?

DataSet[] mySet = new DataSet[6]; 
DataSet finSet = new DataSet();    

for (int j = 0; j <= 5; j++) 

       myConnection.Open(); 

       for (int i = 0; i <= specRowCount - 2; i++) 
       { 

        cleanDesc = dataGridView2.Rows[removalPointer].Cells[1].Value.ToString().Replace("'", "''").Trim(); 
        classname = dataGridView2.Rows[removalPointer].Cells[0].Value.ToString().Trim(); 

        str = "use " + myDatabases[j] + " SELECT top 1 x, y, z, t, h, f, d, " + 
        "s, d, c, s, a, d, f, g, " + 
        "s, f, a, dFROM tttt where c=1 and a=1 and " + 
        "d='" + cleanDesc + "' and d= '" + d+ "'"; 

        myAdapter = new SqlDataAdapter(str, myConnection); 

        myAdapter.Fill(mySet[j], "tttt"); 


        if (countRows != mySet[j].Tables["tttt"].Rows.Count) 
        { 

         mySb.AppendLine(dataGridView2.Rows[removalPointer].Cells[1].Value.ToString()); 


         dataGridView2.Rows.Remove(dataGridView2.Rows[removalPointer]); 


        } 
        else 
        { 

         removalPointer++; 

        } 



        countRows = mySet[j].Tables["tttt"].Rows.Count; 

        finSet.Merge(setArray[j]); 

        dataGridView1.DataSource = finSet.Tables["tttt"]; 


       } 
       myConnection.Close(); 

       MessageBox.Show("Con closed!"); 


      } 
+0

을 "SqlDataAdapter.Fill이 작동하지 않습니다 "DataSets의 배열로 : 당신이 기대하지 않는 것은 어떻게됩니까? –

답변

0

은 그냥 당신이 우리를 표시 한 코드를 기반으로, 그것은 보인다. 따라서 데이터 어댑터의 데이터는 finSet으로 변환되지 않습니다.

또 한가지 :

DataSet[] mySet = new DataSet[6]; 

가 ... 데이터 집합의 배열을 생성하지만, 배열은 모든 요소에 대한 널 (null)이 포함됩니다 :이 코드 것을 확신합니다. 배열을 만들었지 만 채우기 위해 DataSet 객체를 만들지 않았기 때문입니다.

myAdapter.Fill(mySet[j], "tttt"); 

이 같은 시도 : 당신이 널 채우기 위해 시도하고 있기 때문에

그래서이 코드는 오류가 발생합니다 당신이 말하는

mySet[j] = new DataSet(); 
myAdapter.Fill(mySet[j], "tttt"); 
+0

Ann, 답변 해 주셔서 대단히 감사합니다. 내 코드는 루프 myAdapter.Fill (mySet [j], "tttt")의 첫 번째 반복에서도이 시점에 도달하지 않습니다. 그래서 병합 지점이 아닙니다. 왜냐하면 첫 번째 채우기를 수행하지 않기 때문입니다. MessageBoxes로 테스트했습니다. 아무 일도 일어나지 않지만 배열을 채우기를 기대하고있었습니다. 각 배열은 다른 dbs의 결과를 보유합니다. 그런 다음 배열 집합을 finSet에 병합하고 datagridview에 전체 결과를 표시합니다. – user2599346

+0

몇 가지 추가 세부 사항을 추가했습니다. 이것은 도움이 될 수 있습니다. –

+0

감사합니다. Ann! 그게 효과가 있었어! – user2599346