У меня есть DataTable, который имеет 10 столбцов, и после того, как я добавляю в него несколько строк, я хочу добавить его в базу данных с помощью SqlBulkCopy
.
Моя проблема в том, что в DataTable у меня есть строки, а некоторые поля в базе данных - десятичные и даты соответственно. Есть ли способ конвертировать их в нужные типы данных?
При программном добавлении столбцов в ваш DataTable вы можете указать тип: -
DataTable dt = new DataTable();
dt.Columns.Add("FieldName", typeof(System.Decimal));
Это будет выполнено, когда вы выполните массовую копию.
РЕДАКТИРОВАТЬ
В ответ на комментарий пользователя.
При заполнении DataRow информацией явное преобразование требуется только в том случае, если исходные данные не соответствуют целевому полю.
Если типы одинаковы, вы можете просто назначить их.
например
// With a decimal field, decimal target
Decimal myNum = 123;
// Works fine - assuming the Price datacolumn has been set up as a System.Decimal
row["Price"] = myNum;
Похоже, что вы можете создавать столбцы в DataTable в коде (в отличие от заполнения через DataAdapter, который установил бы типы данных столбцов соответствующим образом).
Если это так, то не можете ли вы просто создать DataColumns с правильными типами данных для начала вместо всех строк ... и затем убедиться, что при добавлении в него строк вы преобразуете данные в соответствующий тип?
т. е. добраться до точки, в которой ваш DataTable имеет правильные типы и данные правильно, поэтому SqlBulkCopy может затем поместить его в БД с данными уже в правильной форме.