У меня есть таблица, где одно из полей - «InDatabase» (тип «бит» SQL Server), который не допускает значения NULL.
Я создаю таблицу и добавляю к ней несколько сотен строк, где 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
Я использую этот точный формат около десятка других таблиц без проблем.
Хорошо, я заработал, но на самом деле не понял. Я изменил раздел 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);
Не совсем понятно, почему дюжина других случаев я делал это без установки сопоставлений таблицы, как это сработало, но по какой-то причине с этой таблицей это не сработает, если я не сделаю это.
Если я правильно понял вашу проблему ...
Я думаю, что проблема заключается в определении значения NULL
в c# .net
и SQL
. Среднее NULL
вашего языка программирования в SQL не будет одинаковым. В SQL значение NULL отображается в System.DBNull Class
Просто проверьте, как обращаться с Null и DBNull