Ошибка, вставляющая использование данных SqlBulkCopy

С чистым scala + java way

import scala.reflect.io.Directory

val directory = new Directory(new File("/sampleDirectory"))
directory.deleteRecursively()

deleteRecursively () Возвращает false при ошибке

15
задан abatishchev 21 June 2009 в 14:47
поделиться

3 ответа

При использовании исходного сценария таблицы работает следующий код.

private static DataTable GetTable()
{
    var list = new List<DataColumn>();
    list.Add(new DataColumn("amount", typeof(Double)));
    list.Add(new DataColumn("date", typeof(DateTime)));
    var table = new DataTable("statement");
    table.Columns.AddRange(list.ToArray());

    var row = table.NewRow();
    row["amount"] = 1.2d;
    row["date"] = DateTime.Now.Date;

    table.Rows.Add(row);
    return table;
}
private static void WriteData()
{
    string strConnection = "Server=(local);Database=ScratchDb;Trusted_Connection=True;";
    using (var bulk = new SqlBulkCopy(strConnection, SqlBulkCopyOptions.KeepIdentity & SqlBulkCopyOptions.KeepNulls))
    {
        bulk.ColumnMappings.Add(new SqlBulkCopyColumnMapping("amount", "amount"));
        bulk.ColumnMappings.Add(new SqlBulkCopyColumnMapping("date", "date"));
        bulk.BatchSize = 25;
        bulk.DestinationTableName = "statement";
        bulk.WriteToServer(GetTable());
    }
}

Как уже было сказано Амалом, вам нужны сопоставления столбцов из-за столбца Identity.

20
ответ дан 1 December 2019 в 02:29
поделиться

Тип SQL Date отличается от типа SQL DateTime. Я думаю, что столбец даты в вашей таблице должен иметь тип DateTime, в зависимости от того, как вы его используете.

Тип даты SQL
Тип даты и времени SQL

Обновление:

Я думаю, что ответ Марка должен работать, но вам, вероятно, потребуется указать SqlBulkCopyColumnMappings из исходной таблицы данных в место назначения, иначе может быть получено сопоставление неверно, потому что структура вашей входной таблицы не совпадает с выходной таблицей в точности, т.е. порядок даты и столбцов строк поменяны местами.

например,

var amount = new SqlBulkCopyColumnMapping("amount", "amount");
var date = new SqlBulkCopyColumnMapping("date", "date");
bulk.ColumnMappings.Add(amount);
bulk.ColumnMappings.Add(date);
6
ответ дан 1 December 2019 в 02:29
поделиться

SqlDateTime представляет исходный тип datetime . Вы пробовали просто использовать DateTime . NET в DataTable ? Я надеюсь, что он сможет преобразовать это в типы TSQL datetime или date . То же самое десятичное вместо SqlDecimal .

2
ответ дан 1 December 2019 в 02:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: