InvalidOperationException을주는 SqlBulkCopy null 값을 삽입하려고하지만 모든 값이 테이블에 null이 아닌 오류가 발생합니다.

asp.net c# sqlbulkcopy

문제

필드 중 하나가 null을 허용하지 않는 "InDatabase"(SQL Server "bit"형식) 인 테이블이 있습니다.

나는 테이블을 생성하고 InDatabase에 항상 값이 할당되는 수백 개의 행을 추가합니다 (InDatabase는 행이 다른 데이터베이스에 있는지 여부를 나타냄)

SqlBulkCopy를 호출하면 다음 메시지를 통해 InvalidOperationException Error가 발생합니다.

"Column 'InDatabase' does not allow DBNull.Value."

각 행은 다음과 같이 생성됩니다.

ProductionDatabaseDataSet.EntriesV2Row NewRow = this.InsertTable.NewEntriesV2Row();

NewRow.MeetEntryID = MeetEntryID;
NewRow.EventID = EventID;
NewRow.MeetID = MeetID;
NewRow.AthleteID = AthleteID;
NewRow.Exhibition = Exhibition;
NewRow.Bonus = Bonus;
NewRow.EnterEvent = true;
NewRow.InDatabase = true;
if (AutoTime != null)
    NewRow.AutoTime = AutoTime ?? -1;
if (CustomTime != null)
    NewRow.CustomTime = CustomTime ?? -1;

this.InsertTable.AddEntriesV2Row(NewRow);

그런 다음 위의 내용을 약 300 번 호출하면 SqlBulkCopy가 호출됩니다.

SqlBulkCopy bulkCopy = new SqlBulkCopy(this.Connection.ConnectionString);
bulkCopy.DestinationTableName = this.Adapter.TableMappings[0].DataSetTable;
            bulkCopy.BatchSize = BatchSize;
bulkCopy.WriteToServer(InsertTable); //Throwing the error

나는 문제없이 약 12 ​​개의 다른 테이블에서 똑같은 포맷을 사용한다.

수락 된 답변

좋아, 나는 일할 수 있지만, 실제로 그것을 알아 내지 못했다. bulkCopy 섹션을 다음과 같이 변경했습니다.

bulkCopy.DestinationTableName = this.Adapter.TableMappings[0].DataSetTable;
for (int i = 0; i < this.Adapter.TableMappings[0].ColumnMappings.Count; i++)
    bulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping(
                this.Adapter.TableMappings[0].ColumnMappings[i].SourceColumn.ToString(),
                this.Adapter.TableMappings[0].ColumnMappings[i].DataSetColumn.ToString()));
bulkCopy.BatchSize = BatchSize;


bulkCopy.WriteToServer(InsertTable);

왜 이런 식으로 테이블 매핑을 설정하지 않고이 작업을 수행했는지는 확실하지 않지만 위의 작업을 수행하지 않으면이 테이블에서 어떤 이유로 작동하지 않습니다.


인기 답변

내가 너의 문제를 올바르게 이해했다면 ...

나는 c# .netSQL 에서 NULL 값을 정의하는 것이 문제라고 생각한다. 프로그래밍 언어의 NULL 평균은 SQL에서 동일하지 않습니다. SQL에서 NULL 값은 System.DBNull 클래스에 의해 represnt됩니다.

Null 및 DBNull처리 하는 방법 만 확인하십시오.



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