스프레드 시트의 SqlBulkCopy

asp.net c# sqlbulkcopy

문제

SqlBulkCopy를 사용하여 스프레드 시트의 레코드를 SQL Server 데이터베이스로 가져옵니다.

대량 복사 작업은 대부분의 조건에서 잘 작동합니다. 그러나 그것은 내가 머리를 쓸 수없는 일을하고있다.

내 열 매핑에 정의 된 열이 있습니다.

bCopy.ColumnMappings.Add("Amount", "Amount");

스프레드 시트에서이 테이블은 내 작업 테이블에있는 것처럼 varchar입니다 (라이브 테이블로 데이터를 이동하기 전에 작업 테이블로 가져와 일부 유효성 검사를 수행합니다).

제가 테스트를하는 동안, 저는 기록에 들어가서 숫자에서 FOO라는 단어로 값을 변경했습니다. 그런 다음 가져 왔어요.

내 유효성 검사 루틴은 열의 문제를 올바르게 식별합니다. 그러나 값이 숫자가 아니기 때문에 열이 null이기 때문입니다. 데이터베이스를 검사했을 때이 필드가 null 값으로 가져온 것을 발견했습니다. 나는 그 가치가 FOO가되어야한다고 생각했다.

이것은 이상한 것의 종류로 나를 친다.

차이가 있다면 OLEDB를 사용하여 데이터베이스 테이블과 같은 스프레드 시트에 액세스하고 OLEDBDataReader를 내 BulkCopy 개체의 소스로 전달합니다.

OLEDB 드라이버가이 열의 유효한 값이 아닌 것을 알기에 충분히 똑똑합니까? 모든 것이 기본적으로 string / varchar가 될 것이라고 생각했습니다. (우리는 스프레드 시트의 열 데이터 유형을 수정하지 않습니다)

편집하다

나는 제안 된대로 dataReader를 검사했다. 그리고 이상하게도, Amount 필드를 문자열 값으로 변경하면 datareader의 값이 null이된다. Excel 데이터 렌더링에서 이런 종류의 동작을 처음 보았습니다. 다른 문자열 필드는 정상적으로 작동합니다.

수락 된 답변

IMEX = 1을 OLEDB Connection 문자열에 추가하여 문제를 해결했습니다. 이제 값은 데이터 배열에 표시됩니다. (혼합 값 열을 지원하기 위해이 작업을 수행해야한다고 생각합니다.)



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.