Działa to dobrze dla wszystkich innych typów danych, ale nie jestem w stanie zmusić go do pracy z kolumną "bitową".Uzyskiwanie wyjątku przy zapisywaniu wartości boolowskiej do sql przy użyciu datatable i SqlBulkCopy
To jest mój SQL za to write luzem:
using (var bulk = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.KeepIdentity & SqlBulkCopyOptions.KeepNulls))
{
bulk.BatchSize = 2000;
bulk.DestinationTableName = targetTable;
bulk.WriteToServer(dataTable);
}
To mój DataTable:
DataTable dt = new DataTable();
dt.Clear();
dt.Columns.Add("MyBool", typeof(bool)); // Tried with and without typeof(bool)
return dt;
ten sposób skonstruować wiersz przed dodaniem do DataTable.
personAssociationRow["MyBool"] = true;
jest wyjątek na linii WriteToServer, w zależności od, jeśli typeof(bool)
określona jest:
Cannot insert the value NULL into column 'MyBool', table
ale IntelliSense/debugera wykazuje wartość jako true
lub
The given value of type String from the data source cannot be converted to type int of the specified target column.
, która jest, gdy wartość w intellisense/debugger staje się "True"
czyli stri ng.
W bazie danych kolumna jest zdefiniowana jako bit
i nie zezwala na wartości null.
Jakieś pomysły, w jaki sposób mogę uzyskać mój Boolean do pracy?
Edycja: Właśnie znalazłem i wypróbowałem SqlBoolean
jako typ również, ale to nie zadziałało, to powiedział The given value of type SqlBoolean from the data source cannot be converted to type int of the specified target column.
co sugeruje, że int zadziała, ale nie wydaje się.
Edit: Podejrzewam, że problem leży w jego myśli samej bazy danych jest typu int
gdy jest jasne, jak fioletowy kredką, że typ jest bit
, stąd komunikat o błędzie o to nie konwersja do podstawowego typu int
.
Spróbuj użyć 'int' datatype z' 0' dla 'false' i' 1' dla 'true 'wartości zamiast' bool' –
Tries, mówi nie zezwala na NULL – NibblyPig