Невозможно выполнить массовую вставку записей в таблицы снежинок с помощью dapper и С#.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Невозможно выполнить массовую вставку записей в таблицы снежинок с помощью dapper и С#.

Сообщение Anonymous »

Код: Выделить всё

public async Task BulkInsertAsync(string tableName, IEnumerable data, int batchSize = 1000)
{
int totalRowsAffected = 0;
var batches = data.Batch(batchSize);

foreach (var batch in batches)
{
string connstring = "connection string";
using SnowflakeDbConnection conn = new SnowflakeDbConnection();
conn.ConnectionString = connstring;
conn.Open();
using var transaction = conn.BeginTransaction();
try
{
var dataTable = batch.ToDataTable();
var sql = GenerateBulkInsertSql(tableName, dataTable);
var rowsAffected = await conn.ExecuteAsync(sql, dataTable, transaction: transaction);
transaction.Commit();
totalRowsAffected += rowsAffected;
}
catch
{
transaction.Rollback();
throw;
}
}

return totalRowsAffected;
}

private string GenerateBulkInsertSql(string tableName, DataTable dataTable)
{
var columns = string.Join(", ", dataTable.Columns.Cast().Select(c => c.ColumnName));
var values = string.Join(", ", dataTable.Columns.Cast().Select(c => ":" + c.ColumnName));
return $"INSERT INTO {tableName} ({columns}) VALUES ({values})";
}

public static DataTable ToDataTable(this IEnumerable data)
{
var dataTable = new DataTable();
var properties = typeof(T).GetProperties();

foreach (var prop in properties)
{
dataTable.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
}

foreach (var item in data)
{
var row = dataTable.NewRow();
foreach (var prop in properties)
{
row[prop.Name] = prop.GetValue(item) ?? DBNull.Value;
}
dataTable.Rows.Add(row);
}

return dataTable;
}
Кто-нибудь может помочь с выполнением операций BulkInsert и BulkUpdate в таблицах Snowflake с использованием Dapper и C#. Я сталкиваюсь с проблемами, из-за которых значения не вставляются в таблицы Snowflake. Любая помощь будет принята с благодарностью. Заранее спасибо!

Подробнее здесь: https://stackoverflow.com/questions/791 ... pper-and-c
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»