SqlBulkCopy, что дает InvalidOperationException Ошибка, что я вставляю нулевые значения, но все значения не равны нулю в таблице - PullRequest
2 голосов
/ 20 октября 2011

У меня есть таблица, в которой одно из полей имеет тип «InDatabase» (тип SQL «бит»), который не допускает нулевые значения.

Я создаю таблицу и добавляю в нее несколько сотен строк, гдеInDatabase всегда присваивается значение (InDatabase относится к тому, находится ли строка в другой базе данных)

Когда я вызываю SqlBulkCopy, он выдает ошибку InvalidOperationException, с сообщением:

"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

Я использую этот точно такой же формат примернодюжина других таблиц без проблем.

Ответы [ 2 ]

1 голос
/ 22 октября 2011

ОК, я заставил это работать, но не понял это.Я изменил раздел 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);

Не совсем уверен, почему дюжину других раз, когда я делал это, не устанавливая сопоставления таблиц, как это работало, но по какой-то причине с этой таблицей он не будет работатьесли я не сделаю выше.

0 голосов
/ 20 октября 2011

Если я правильно понял вашу проблему ...

Я думаю, что проблема заключается в определении значения NULL в c# .net и SQL.Среднее значение NULL вашего языка программирования не будет таким же в SQL.В SQL значение NULL, представленное System.DBNull Class

Просто отметьте, как Обрабатывать Null и DBNull

...