Лучший способ для массовой вставки из С# DataTable
У меня есть DataTable
, который я хочу нажать на БД. Я хочу сказать, как
myDataTable.update();
Но после чтения MSDN docs, похоже, это вставляет строки за строкой.
Следует отметить, что эти операторы не выполняются в виде пакетного процесса; каждая строка обновляется индивидуально.
Каковы мои альтернативы?
Изменить: я использую SQL Server 2005
Ответы
Ответ 1
При использовании SQL Server SqlBulkCopy.WriteToServer(DataTable)
Или также с SQL Server вы можете записать его в .csv и использовать BULK INSERT
Если вы используете MySQL, вы можете записать его в .csv и использовать LOAD DATA INFILE
Если вы используете Oracle, вы можете использовать функцию привязки массива ODP.NET
Если SQLite:
Ответ 2
string connectionString= ServerName + DatabaseName + SecurityType;
using (SqlConnection connection = new SqlConnection(connectionString))
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection)) {
connection.Open();
bulkCopy.DestinationTableName = "TableName";
try {
bulkCopy.WriteToServer(dataTableName);
} catch (Exception e) {
Console.Write(e.Message);
}
}
Обратите внимание, что структура таблицы базы данных и имени таблицы должна быть одинаковой или вызывать исключение.
Ответ 3
Это будет во многом зависеть от используемой СУБД, и существует ли даже такая возможность .NET для этой СУБД.
Если вы используете SQL Server, используйте класс SqlBulkCopy.
Для других поставщиков баз данных попробуйте выполнить поиск по ним. Например, поиск "Вставка .NET Bulk в Oracle" привел к некоторым интересным результатам, включая эту ссылку, в Stack Overflow: Массовая вставка в Oracle с использованием .NET.
Ответ 4
Вот как я это делаю, используя DataTable. Это рабочая часть кода TEST.
using (SqlConnection con = new SqlConnection(connStr))
{
con.Open();
// Create a table with some rows.
DataTable table = MakeTable();
// Get a reference to a single row in the table.
DataRow[] rowArray = table.Select();
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(con))
{
bulkCopy.DestinationTableName = "dbo.CarlosBulkTestTable";
try
{
// Write the array of rows to the destination.
bulkCopy.WriteToServer(rowArray);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}//using
Ответ 5
Класс SqlBulkCopy лучше всего подходит для SQL-сервера,
Выполнение массовой загрузки/вставки DataTable в таблицу на SQL-сервере в С#