Вставить данные таблицы C # в таблицу SQL Server - PullRequest
7 голосов
/ 27 июля 2010

Есть ли в любом случае массовая вставка System.Data.DataTable из C # в таблицу SQL Server с использованием процедуры сохранения и передачи этой таблицы в качестве параметра?

В таблице не будет фиксированного количества записей.

Ответы [ 2 ]

6 голосов
/ 27 июля 2010

Да, есть способ:

        DataTable dataTable = null; // your data needs to be here
        try
        {
            ConnectionStringSettings mConString = ConfigurationManager.ConnectionStrings["SiteSqlServer"];

            // Optional truncating old table
            using (SqlConnection connection = new SqlConnection(mConString.ConnectionString))
            {
                connection.Open();
                // Delete old entries
                SqlCommand truncate = new SqlCommand("TRUNCATE TABLE MYTABLE", connection);
                truncate.ExecuteNonQuery();
            }

            SqlBulkCopy bulkCopy = new SqlBulkCopy(mConString.ConnectionString, SqlBulkCopyOptions.TableLock)
                                          {
                                              DestinationTableName = "dbo.MYTABLE",
                                              BatchSize = 100000,
                                              BulkCopyTimeout = 360
                                          };
            bulkCopy.WriteToServer(dataTable);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);
        }

Пожалуйста, поэкспериментируйте с BatchSize - 100000 было для меня хорошо - оно не должно быть больше этого - в противном случае скорость миграции уменьшается.BatchSize не ограничивает ваши данные - это просто размер каждого «пакета», который будет отправлен на сервер sql.

SiteSQLServer должен находиться внутри вашего app.config или web.config.Вам нужно изменить параметры здесь, если нет.

Пожалуйста, измените MYTABLE на ваше имя таблицы.

2 голосов
/ 27 июля 2010

В версиях SQL Server до 2008 года единственным способом передачи всей DataTable на SQL Server был SqlBulkCopy . Вы должны поместить все данные в (возможно, временную) промежуточную таблицу и вызвать процедуру для обработки подготовленных данных.

В SQL Server 2008 были введены табличные пользовательские типы. Они предоставляют несколько замечательных новых опций для работы с наборами данных.

Посмотрите на MSDN:

и, вероятно, секунда в двух моих сообщениях в блоге:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...