nicht importieren Das scheint wie eine doppelte Frage. Aber als ich suchte & sah die verwandten Fragen & Antworten, ich kann immer noch nicht die Antwort finden.SQL Server - kann Wert 0 oder 1 in Bitspalte
Ich schreibe ein Ladeprogramm, das Datensätze aus einer CSV-Datei in eine Datenbanktabelle importiert. Hier ist die Demo.
Die Datenbanktabelle ist etwas wie unten:
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);
Das Ladeprogramm ist wie:
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();
}
}
Alles ist oben in Ordnung.
Aber das Problem ist die CSV-Datei ist von 3rd-Party und die Werte für die Spalte ‚IsValid‘ 0 oder 1, wie unten
Name,IsValid
aa,1
bb,0
Wenn das Ladeprogramm versucht, diese CSV-Datei zu laden, bulkCopy.WriteToServer (Tabelle) wird werfen Ausnahme
Der sQL-Server ich verwende ist sQL Server 2014
Jede Hilfe wird geschätzt werden. Vielen Dank.
--- update ---
Danke Jungs für die Lösungen. Ich werde versuchen, 0/1 im Loader-Programm manuell auf falsch/wahr zu setzen. Aber ich möchte immer noch wissen, ob es eine einfache Lösung für dieses Problem gibt (wie das Ändern der Einstellungen in SQL Server oder SqlBulkCopy).
Ich habe auch versucht SQL in SQL Server Management Studio wie
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
Beide gut funktioniert. Aber nicht sicher, warum SQL-Server die Massenkopie ablehnt, wenn der IsValid-Wert 0 oder 1 ist. Und wenn wir die Tabellendaten mit 'Select' anzeigen, ist der Wert für IsValid tatsächlich 0 oder 1.
Versuchen TRUE, FALSE statt 1,0. –
@AbdulRasheed Ja, wahr/falsch ist in Ordnung für das Programm. Aber die CSV-Datei stammt von einer anderen Firma und der Wert ist 0/1. – yyou
@ yyou Dann müssen Sie ihnen sagen, es mit 'true' /' false' zu senden, oder Sie müssen Ihr Programm die Werte entsprechend ersetzen lassen. – Rob