Он отлично работает для всех других типов данных, но я не могу заставить его работать со столбцом «бит».
Это мой SQL для выполнения массовой записи:
using (var bulk = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.KeepIdentity & SqlBulkCopyOptions.KeepNulls))
{
bulk.BatchSize = 2000;
bulk.DestinationTableName = targetTable;
bulk.WriteToServer(dataTable);
}
Это мои данные:
DataTable dt = new DataTable();
dt.Clear();
dt.Columns.Add("MyBool", typeof(bool)); // Tried with and without typeof(bool)
return dt;
Вот как я строю строку, прежде чем добавлять ее в datatable.
personAssociationRow["MyBool"] = true;
Исключение выбрано для строки WriteToServer и в зависимости от того, указан ли typeof(bool)
:
Cannot insert the value NULL into column 'MyBool', table
но intellisense / debugger показывает значение true
или
The given value of type String from the data source cannot be converted to type int of the specified target column.
когда значение в intellisense / debugger становится "True"
то есть строкой.
В базе данных столбец определяется как bit
и не допускает значения NULL.
Любые идеи, как я могу заставить мое логическое работать?
Изменить: просто нашел и попробовал SqlBoolean
как тип тоже, но это не сработало, он сказал, что The given value of type SqlBoolean from the data source cannot be converted to type int of the specified target column.
что предполагает, что int будет работать, но это не похоже.
Редактирование: я подозреваю, что проблема заключается в том, что базовая база данных - это тип int
когда ясно, как пурпурный карандаш, что этот тип bit
, поэтому сообщение об ошибке не преобразуется в базовый тип int
.
Я исправил это, оказалось, что это проблема с отображением. По какой-то причине все 20 других таблиц отображаются полностью точно, но эта таблица не отображалась правильно, пока я не добавил следующее:
bulk.ColumnMappings.Add("Ex", "Ex");
Обнаружена та же проблема: установка столбца bool в true / false игнорировалась массовой копией, для всех значений было установлено значение null. Предыдущий ответ помог разрешить его, но мне пришлось добавлять сопоставления для всех столбцов, чтобы заставить его работать:
foreach (DataColumn column in table.Columns) {
sqlBulk.ColumnMappings.Add(column.ColumnName, column.ColumnName);
}
sqlBulk.WriteToServer(table);