Я использую SqlBulkCopy.WriteToServer
-метод для вставки большого количества данных в таблицу базы данных. Когда я передаю datatable в качестве параметра метода WriteToServer
, некоторые числовые c значения (numeric(17,6))
вычитаются на .000001
, пока они вставляются в таблицу базы данных. Но не все значения меняются, это происходит случайно, не удалось определить закономерность. eg- 10068.121
заменяется на 10068.120999
Теперь, когда я передаю datareader в качестве параметра метода WriteToServer, он работает нормально, значения numeri c остаются неизменными.
Есть идеи, почему это происходит для datatable, а не для datareader? Мое приложение - это консольное приложение C#.
Вот мой код ... если я передаю данные (_dt) методу _sqlBulkCopy.WriteToServer, тогда у меня возникнет проблема. Но когда я конвертирую datatable (_dt) в DataTableReader (_Reader), он работает нормально.
DataTable _dt = new DataTable();
_odbCDA.Fill(_dt);
DataTableReader _Reader = new DataTableReader(_dt);
using (SqlBulkCopy _sqlBulkCopy = new SqlBulkCopy(_sqlConnectionString))
{
_sqlBulkCopy.BulkCopyTimeout = 3600;
_sqlBulkCopy.DestinationTableName = _tableName;
_sqlBulkCopy.WriteToServer(_Reader); //This works
//_sqlBulkCopy.WriteToServer(dt); //This is having the issue
_sqlBulkCopy.Close();
}