2013-12-10 1 views
0

입니다. Microsoft Access 데이터베이스에서 빈 MS-SQL 데이터베이스로 데이터를 가져 오는 프로젝트를 진행하고 있습니다. Access (VM)의 테이블 구조가 MS-SQL (vlVerticalMarketing)의 테이블과 정확히 일치하지 않습니다.dataadapter.update를 사용할 때 정확히 일치해야하는 열은

select VM as VerticalMarketing, 0 as Deleted, 0 as Archive from VM where VM is not null 

가 그럼 난 사용하여 DataTable의 이름을 변경 :

AccessTable VM    SQLTable vlVerticalMarketing         
ID (autonumber)    VMID (PK, identity) 
VM       VerticalMarketing 
           Deleted (required) 
           Archive (required) 
           Other non-required fields 

나는 다음과 같은 쿼리를 사용하여 DataTable의 DT에 액세스 데이터를 작성하고있어 거기에서

DT.TableName = "vlVerticalMarketing" 

을, DataTable을 클래스 함수로 전달합니다.

Public Function CopyFromDataTable(ByVal sourceDT As DataTable, ByVal TableName As String) As Boolean 
    Try 
     OpenDB() 
     Dim DA As New SqlDataAdapter("select VerticalMarketing, Deleted, Archive from " & TableName, Me.DBConn) 
     Dim CB = New SqlCommandBuilder(DA) 
     CB.QuotePrefix = "[" 
     CB.QuoteSuffix = "]" 
     DA.InsertCommand = CB.GetInsertCommand(True) 
     Dim destDT = sourceDT.Copy() 
     DA.Update(destDT) 

OpenDB는 다른 것들을 위해 사용하는 클래스 메소드이고 나는 잘 알고 있습니다. 연결 문자열을 설정하고 DBConn을 SqlConnection 개체로 만듭니다. 나머지는 표준 VB.Net입니다. 모든 것은 오류없이 실행됩니다. sourceDT와 destDT는 모두 데이터를 가지고 있습니다 (디버깅하는 동안 DataSet Visualizer를 통해 보았습니다). 문제는 SQL 데이터베이스에 데이터가 전달되지 않는다는 것입니다.

내가 뭘 잘못하고 있는지에 대한 아이디어는 SQL 데이터베이스가 데이터를받지 못하게하는 원인입니다.

답변

1

DataAdapter에서 Update를 호출하면 destDt의 행에 RowState.Added이 없다는 것이 문제라고 생각합니다. Update 문의 반환 값을 확인할 수 있습니다. 0이 될 것입니다. 더 삽입이 실행되지 않았기 때문에 ... 당신은

+0

의 RowState는 ...이 당신의 destDT의 행에 DataRow.SetAdded()를 호출 할 수 있습니다에 대한 해결 방법으로 ... SQL 서버 프로파일 러

이것을 확인할 수 있습니다 변하지 않은. 행을 통해 반복하고 일을. SetAdded() 바로 그것을 고정. – KevenDenen

+0

추가 된 행을 설정하지 않는 것이 이상합니다. 다른 프로젝트에서 Excel 시트의 데이터를 DataSet으로 가져 오기 위해 동일한 코드를 사용하고 위의 코드를 통해 Access 데이터베이스에 각 테이블을 전달했으며 각 행을 추가로 설정하지 않아도 정상적으로 작동했습니다. – KevenDenen