2011-05-05 3 views
1

현재 프로젝트의 경우 SQL-Database에서 Access-Database로 데이터를 전송해야합니다. 지금은 SqlDataAdapter를 사용하여 DataSet에 데이터를로드합니다. 항목을 통해 그 I 루프 후 및 액세스-DB 사용은 OleDb에 삽입 :C#을 사용하여 SQL에서 Access로 데이터 전송하기 #

// Load data from SQL 
DataSet ds = new DataSet(); 
SqlDataAdapter adapter = new SqlDataAdapter("select goes here", sqlConnection); 
adapter.Fill(ds); 

// Prepare the Insert Command 
oleDBCommand = "Insert into..."; 
oleDBCommand.Parameters.Add(new OleDbParameter(...)); 

// Insert every row from the DataSet 
for (int i = 0; i < ds.Tables[0].Rows.Count; i++) 
{ 
    // Update Parameters and Execute 
    oleDBCommand.Parameters[0].Value = ds.Tables[0].Rows[i].ItemArray[0]; 
    oleDBCommand.ExecuteNonQuery(); 
} 

이 방법은 잘 작동하지만 그것은 서투른 천천히 느낀다. 그래서 한 DB에서 다른 DB로 데이터를 전송하는 더 좋은 방법이 있는지 궁금합니다.

+2

액세스에 SQL에서거야 :
다음, 당신은 단지 Access 데이터베이스 인 OleDB를 통해이 쿼리를 실행하여 로컬 테이블에 연결된 테이블에서 직접 삽입 할 수 있습니다 ... 어색하고 느린 것이 좋을지도 모릅니다.) – Nathan

+0

어색함이 무엇을 의미합니까? – KaeL

+0

모든 행을 순환하는 것보다 나은 해결책이있는 것처럼 느껴지고 삽입 문을 호출하는 것처럼 느껴집니다. s – Syjin

답변

1
  1. 사용하여 SqlDataReader : SqlDataReader를 빠르게 SqlDataAdapter를보다 실행
  2. 를 사용하여 트랜잭션 : 트랜잭션을 사용하고이 거래에 각 명령을 결합한다. 삽입 명령을 완료 한 후 트랜잭션을 커밋하면 더 빨리 실행될 수 있습니다.
+0

감사합니다. 그것은 내가 찾던 정확히는 아니지만 도움이되었다. 나는 대답으로 그걸 가지고 갈 것이다 ... – Syjin

+0

당신을 진심으로 환영합니다. 너 정확히 무엇을보고 있니? – icaptan

0

또 다른 아이디어 :
항상 같은 Access 데이터베이스 그리고 당신은 같은 테이블 (들)에서 항상 데이터를 가져올 경우, 한 번에 할 수 link the SQL Server tables in Access.

SQL Server 테이블이 연결된 경우 로컬 테이블과 마찬가지로 MDB에서 사용할 수 있습니다. (더 이상 지원되지 않는)

insert into LocalAccessTable (Column1, Column2) 
select Column1, Column2 
from LinkedSqlServerTable 
관련 문제