Это похоже на дублирующий вопрос. Но по мере того как я искал & просмотрел связанные вопросы & ответов, я все еще не могу найти ответ.SQL Server - не может импортировать значение 0 или 1 в бит столбца
Я пишу программу-загрузчик, которая импортирует записи данных из файла CSV в таблицу базы данных. Вот демо.
В таблице базы данных является то, как показано ниже:
use Test;
create table BoolTest (Name varchar(20) not null, IsValid bit not null);
insert into BoolTest (Name, IsValid) values('xx', 1);
insert into BoolTest (Name, IsValid) values('yy', 0);
Программа загрузчика как:
class Program
{
static void Main(string[] args)
{
var csvFileContent = "Name,IsValid\r\naa,true\r\nbb,false";
var csvLines = csvFileContent.Split(new String[] { "\r\n" }, StringSplitOptions.None);
var columnNames = csvLines[0].Split(',');
var table = new DataTable();
foreach (var columnName in columnNames)
{
table.Columns.Add(new DataColumn(columnName));
}
for (var n = 1; n < csvLines.Length; ++n)
{
var line = csvLines[n];
var values = line.Split(',');
table.Rows.Add(values);
}
var connectionString = "Data Source=localhost;Initial Catalog=Test;Integrated Security=True";
using (var bulkCopy = new SqlBulkCopy(connectionString)) {
bulkCopy.DestinationTableName = "BoolTest";
bulkCopy.ColumnMappings.Add("Name", "Name");
bulkCopy.ColumnMappings.Add("IsValid", "IsValid");
bulkCopy.WriteToServer(table);
}
Console.WriteLine("Done");
Console.Read();
}
}
Все хорошо выше.
Но проблема заключается в файл CSV от 3 участника и значения для столбца «IsValid» является 0 или 1, как показано ниже
Name,IsValid
aa,1
bb,0
Когда программа загрузчик пытается загрузить этот файл CSV, bulkCopy.WriteToServer (таблица) выбросит исключение
сервер SQL я использую Sql сервер 2014.
Любая помощь будет быть оцененным. Благодарю.
--- обновление ---
Спасибо, ребята, за решения. Я попытаюсь вручную изменить 0/1 на false/true в программе загрузчика. Но все же вы хотите знать, есть ли легкое исправление (например, изменение настроек в SQL Server или SqlBulkCopy) для этой проблемы.
Я также попытался SQL в SQL Server Management Studio, как
insert into BoolTest (Name, IsValid) values('aa', 1); -- this works as we expected
insert into BoolTest (Name, IsValid) values('aa', '1'); -- this also works to my surprise
И работает хорошо. Но не знаете, почему SQL-сервер отклоняет массовую копию, когда значение IsValid равно 0 или 1. И когда мы показываем данные таблицы с помощью «select», значение для IsValid на самом деле равно 0 или 1.
Попробуйте TRUE, FALSE вместо 1,0. –
@AbdulRasheed Да, true/false в порядке для программы. Но файл csv принадлежит другой компании, а значение равно 0/1. – yyou
@yyou Тогда вам нужно будет сообщить им, чтобы они отправили его с помощью 'true' /' false', или вам нужно, чтобы ваша программа заменила значения соответствующим образом. – Rob