2012-06-21 2 views
2

에서 데이터베이스의 모든 테이블 내가 ADO.Net [C 번호]를 배우고 DataGridView.DataSource = DataSet.tables [] 명령을 사용하여 다른 DataGridViews을 채우려하고있다. 하지만 난 단지 1 테이블 1 데이터 어댑터를 채우는 방법을 알고, 그래서 내가 DataGridView에까지 채우기 위해 dataset.tables [테이블 인덱스] 옵션을 사용하여 전체 데이터베이스를 조회하고 하나의 데이터 세트에서 모든 테이블을 넣어 할 수 있습니다 ?로드 하나의 데이터 세트

예 : 사전에

 OleDbConnection con = new OleDbConnection(); 
     con.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;data source =.accdb"; 

     ds = new DataSet(); 
     da = new OleDbDataAdapter("SELECT * ", con); 
     da.Fill(ds); 
     dgv.DataSource = ds.Tables[0]; (i want to have all the tables as an index so that i can put this as the datasource of the datagridview). 

감사합니다.

da = new OleDbDataAdapter("SELECT * FROM Table1; SELECT * FROM Table2", con); 

또한, 여러 DataAdapters를 사용하여 데이터 집합을 채울 수 :

+0

귀하의 질문은 모호합니다. "table"은 System.Windows.Forms.DataGridView 테이블, System.Data.DataTable 인스턴스 또는 실제 데이터베이스 테이블을 의미합니까? – Dai

+0

그들은 데이터베이스의 테이블과 데이터 세트의'DataTables'를 구체적으로 언급하고 있습니다. 질문의 마지막 문장에서 언급했듯이. –

+0

나는 모든 물리적 데이터베이스 테이블을 1 개의 단일 데이터 어댑터로 설정하고자하는데, 이는 내 datagridview 소스에 사용할 수있는 것입니다. – timouwerkerk

답변

3

나는 당신이 그렇게처럼 semilcolon로 구분하여 그것을 여러 SELECT 쿼리를 제공함으로써, 여러 결과 집합을 반환하는 데이터 어댑터를 말할 수 있다고 생각합니다 이렇게 :

daTable1 = new OleDbDataAdapter("SELECT * FROM Table1", con); 
daTable2 = new OleDbDataAdapter("SELECT * FROM Table2", con); 
daTable1.Fill(ds, "Table1"); 
daTable2.Fill(ds, "Table2"); 

그러면 색인기를 통해 데이터 세트의 테이블에 액세스 할 수 있어야합니다. 특히 ds.Tables[int index]ds.Tables[String name],과 같이 :

dgv.DataSource = ds.Tables[0]; 또는

dgv.DataSource = ds.Tables["Table1"];이 더 많은 정보를 참조 MSDN - Populating a DataSet from a DataAdapter (ADO.NET) (sepcifically 여러 결과다중 DataAdapters에서 데이터 집합을 채우기 설정).

+0

데이터베이스의 모든 테이블을 선택할 수 있는지 확실하지 않습니다. 나는 안쪽으로 기울어 질 것이고, 아마도 필요한 테이블을 지정할 필요가있을 것이다. 회신에 대한 –

+0

감사합니다, 내 시험 어제 내가 그래서 난 당신이 두 번째 각 테이블에 대해 새 어댑터를 사용하고 adapter.fill로 세트를 채울 언급 한 방법을 사용하는 테이블의 모든 데이터를 12 개있는 GridViews과 같이 입력했다(). 그러나 코드는 꽤 길어지고 있었기 때문에 나는 그들을 모두 선택하는 것이 가능하다고 질문하는 것처럼 선생님이 예, 가능한 것이어야하지만 그가 어떻게, 어쩌면 다른 사람을 알았는지에 대해 궁금해했는지 궁금합니다. – timouwerkerk

+1

나는 그것이 가능하다고 생각하지만 sys DB를 쿼리하고 거대한 SELECT 문을 즉석에서 작성하는 것과 관련이 있습니다. 나에게 위험하고 해커처럼 들린다. –

0

또는이 쉬운 방법을 사용할 수 있습니다. 이렇게하면 원하는만큼 테이블을 추가 할 수 있습니다.

string str = @"SELECT INV_ID,INV_CLIENTNAME,INV_ADD1,INV_CITY,INV_TEL,INV_CIF,INV_DATE,INV_DISCOUNT, 
          ITEM_DES,ITEM_QTY,ITEM_PRICE,INV_TAX_PERCENT,ITEM_QTY*ITEM_PRICE as gtotal 
          FROM (tbl_client INNER JOIN tbl_item ON tbl_client.INV_ID = tbl_item.FK_INV_ID) 
          WHERE (tbl_client.INV_ID = 'abc123')"; 

OleDbDataAdapter adp = new OleDbDataAdapter(str, cn.db_cn); 
DataSet dset = new DataSet(); 
adp.Fill(dset,"DataTable1"); 

str = @"SELECT company_name, company_address, company_city, company_tel, company_cif, Id FROM tbl_info"; 

adp = new OleDbDataAdapter(str, cn.db_cn); 

adp.Fill(dset, "tbl_info");