SQL 대량 삽입이 테이블에 값을 제대로 삽입하지 않습니다.

.net excel sqlbulkcopy sql-server-2008-r2

문제

Excel 파일 (.xlsx)이 있는데 SQL Server 테이블에 파일 내용을 업로드하려고합니다. SQL 대량 복사를 사용하여 데이터를 대량 삽입합니다. 데이터가 테이블에 삽입되지만 데이터가 제대로 삽입되지 않은 것으로 나타납니다.

다음은 Excel 데이터 예제입니다.

여기에 이미지 설명을 입력하십시오.

이것은 SQL 대량 복사를위한 코드입니다.

string fname = Path.GetFileName(fup_addRoute.FileName);
fup_addRoute.SaveAs(Server.MapPath("/Admin/UserRoutes/" + fname));
string path = Server.MapPath("/Admin/UserRoutes/" + fname);

using (OleDbConnection connection = new OleDbConnection(string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=Excel 8.0", path)))
{
      OleDbCommand command = new OleDbCommand("select * from [Sheet1$]", connection);
      connection.Open();
      System.Data.Common.DbDataReader dr = command.ExecuteReader();
      SqlBulkCopy bulkInsert = new SqlBulkCopy(con); 
      bulkInsert.DestinationTableName = "routesdata";
      bulkInsert.WriteToServer(dr);
      connection.Close();
      dr.Close();
      bulkInsert.Close();
}

삽입 후 데이터 :

여기에 이미지 설명을 입력하십시오.

마지막 행만 삽입되고 Excel 시트의 첫 번째 열 값이 누락됩니다. table의 xid 열은 자동 증가 열입니다.

이 절차는 MySql에서 'load data infile'을 사용하여 쉽지만 SQL Server로 마이그레이션했습니다. 내 코드에서 내가 뭘 잘못하고있어. 제발 제안.

수락 된 답변

나는 실제로 당신이 예외를보고하지 않는다는 것에 조금 놀랐습니다.

여하튼, (적어도 부분적으로) 컬럼 맵핑을 지정해야한다고 생각합니다.

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopycolumnmapping.aspx에서

매핑이 정의되어 있지 않으면 ColumnMappings 컬렉션이 비어 있습니다. 열은 순서에 따라 암시 적으로 매핑됩니다. 이 기능을 사용하려면 원본 및 대상 스키마가 일치해야합니다. 일치하지 않으면 InvalidOperationException이 발생합니다.

Excel 파일과 데이터베이스 테이블이 모든 열에서 일치하지 않는 것을 볼 수 있습니다 (예 : 자동 증가). 그래서 난 당신의 열 매핑을 지정하려고 합니다 .


인기 답변

첫 번째 행이 누락 된만큼 이전 주석에 대한 후속 조치로 연결 문자열에 HDR=No 를 추가해야하는 것처럼 들립니다.

다음과 같이 보일 것입니다 :

Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR=No';

--편집하다

추가 된 아포 스트로피에 유의하십시오.

행운을 빕니다.



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