먼저 몇 가지 배경 정보 : (Access 데이터베이스)데이터 집합을 사용하여 한 데이터베이스에서 다른 데이터베이스로 데이터를 전송하는 방법은 무엇입니까? 평소처럼
데이터베이스 A는 - 나는 단지 두 개의 열에서 필요한 정보가있는 테이블을 보유하고있다. 이 두 열의 정보는 데이터베이스 A에 액세스 할 수없는 사람들이 사용할 응용 프로그램에 필요합니다.
데이터베이스 B (액세스 데이터베이스) - 두 개의 열만있는 테이블을 포함합니다 (테이블에서 필요한 것까지 거울 에이). 데이터베이스 B는 응용 프로그램의 모든 사용자가 액세스 할 수 있습니다. 한 가지 문제는 열 이름이 데이터베이스 A의 테이블에있는 것과 동일하지 않다는 것입니다.
필요한 작업은 일주일에 한 번씩 자동으로 실행되는 유틸리티를 통해 필요한 데이터를 전송하는 것입니다. 두 데이터베이스가 완전히 동기화되어있을 필요는 없습니다. 전송 유틸리티는 두 데이터베이스 모두에 액세스 할 수있는 사용자 계정에서 실행됩니다 (분명히).
는 여기에 내가 (다시 더 나은 방법이 있는지, 멀리 제안 해주십시오) 촬영 한 접근 방식 : 그것은 필요한 테이블에만 두 개의 열입니다 데이터베이스 A.에서
잡고 데이터입니다.
DataReader 개체와 WriterStream 개체를 사용하여 [tablename] .txt 파일에 데이터를 씁니다. 나는 schema.ini 파일을 사용하고 데이터 열이 데이터베이스 B와 같은 이름을 갖도록 할 수 있도록했습니다.
테이블을 미러링하는 DataTable을 포함하는 DataSet 개체를 만듭니다. 데이터베이스 B.
text, hdr = yes 및 fmt = delimited의 확장 속성이있는 Microsoft.Jet.OLEDB.4.0 공급자를 사용하여 .txt 파일의 정보를 DataTable에 빨아들입니다. .ini 파일 설정 및 .txt 파일 설정). DataAdapter를 사용하여 DataTable을 채 웁니다.
이 갱신 될 필요가 테이블에있는 현재의 모든 데이터를 포함하도록
가 데이터베이스 B의 정보에 빨아 데이터베이스 B.에서 테이블을 반영 DataTable을을 포함, 다른 DataSet 개체를 만들기 다시 DataAdapter를 사용하여이 DataTable (서로 다른 데이터 소스를 사용하기 때문에 5 단계와는 다른)을 채 웁니다.
데이터베이스 A (또는 .txt 파일)의 데이터를 보유하는 DataTable을 기술적으로 병합합니다.
데이터베이스 B의 테이블을 변경하여 업데이트하십시오.
나는 업데이트, 삭제 및 삽입이 로직이 사용되지 않습니다, 그러나 데이터베이스 B. 이야기에 대한 repsonsible 인 데이터 어댑터에 대한 수동 명령을 작성한 데이터 집합 -에서 - 데이터베이스 - B.Merge (데이터 집합 때문에 -From-TxtFile [tableName])은 HasChanges 플래그를 반전하지 않습니다. 즉, DataSet-From-Database-B.Update는 명령을 실행하지 않습니다.
DataSet-From-TxtFile에서 데이터를 가져 와서 병합하여 데이터베이스 B에 적용 할 수있는 방법이 있습니까? 여기서 중요한 단계를 놓치고 있습니까?
데이터베이스 B의 테이블에서 모든 레코드를 삭제 한 다음 텍스트 파일의 모든 레코드를 삽입 할 수 있다는 것을 알고 있습니다. (데이터 세트의 각 레코드를 반복하고 트리거 할 수 있도록 row.SetAdded를 적용해야하는 경우에도 마찬가지입니다. HasChanges 플래그)하지만, 매번 변경 사항 만 적용해야합니다.
저는 C#과 2.0 Framework (하나의 테이블 만 처리하기 때문에 DataSet 및 DataAdapters 대신 DataTables 및 TableAdapters를 사용할 수 있음을 알고 있습니다. 데이터베이스 B에 필요한 경우
TIA
두 데이터베이스에서 열 이름이 다르기 때문에이 파일이 작성되었으므로 DataAdapter가 어떻게 반응하는지 확신 할 수 없었습니다. 파일을 사용하면 schema.ini 파일을 사용하고 텍스트 파일에 열 머리글을 써서 일치시킬 열 이름이있는 DataSet에 데이터를 강제로 적용 할 수 있습니다. –
의사 코드가 좋습니다. 그것을하는 "수동"방법처럼 보이는 것은 실제로 그렇게 될 것이라고 생각했던 것만 큼 많은 고통이 아닙니다. 감사합니다 tvanfosson. –