Excel에서 SQL로. BulkCopy에 대한 대안?

c# sql sqlbulkcopy

문제

DataReader 및 SqlBulkCopy를 사용하여 Excel 스프레드 시트에서 MSSQL 테이블로 데이터를 복사하는 코드 조각이 있습니다. 테이블에 기본 키를 작성하고 실패 할 때까지 제대로 작동했습니다. Excel 테이블에서 데이터를 다시 채우기 전에 먼저이 테이블의 내용을 삭제합니다.

소량의 데이터 만 이동하기 때문에 BulkCopy를 사용하는 것보다 더 나은 방법이 있는지 궁금해했습니다.

업데이트 : 아래에 상대 코드 및받은 오류 : "데이터 원본에서 String 형식의 지정된 값을 지정한 대상 열의 float 형식으로 변환 할 수 없습니다."

using (OleDbConnection connection = new OleDbConnection(excelConnectionString))
            {
                connection.Open();
                OleDbCommand cmd = new OleDbCommand
                ("SELECT Name, Date, Amount FROM ExcelNamedRange", connection);

                using (OleDbDataReader dr = cmd.ExecuteReader())
                {
                    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString))
                    {
                        bulkCopy.DestinationTableName = "SqlTable";
                        bulkCopy.WriteToServer(dr);

                    }
                }                 
            }

수락 된 답변

SqlBulkCopy는 자동으로 필드를 매핑합니다. 그러나 기본 매핑을 더 이상 사용할 수없는 기본 키를 추가 했으므로

SqlBulkCopy 개체에 필드를 매핑하는 방법을 명확하게 알려주도록 ColumnMapping을 설정해야합니다.

기본 키를 제외한 모든 필드에서이 작업을 수행하십시오 (PK에서 ID를 사용한다고 가정).

예 :

_bulkCopyEngine.ColumnMappings.Add("fieldname_from", "fieldname_to");

인기 답변

기본 키를 작성하면 도메인 제한 조건을 적용하는 것이 좋습니다 (좋은 점).

따라서, 실제 문제는 당신이 대량 삽입을 수행 할 수있는 또 다른 방법이 필요합니다,하지만 당신은 당신이합니다 (PK 집행에 대한 정확한 이유) 중복 키가 이유를 찾을 필요가 없습니다.



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