SqlClient CopyDataToServer - методNemiro.Data.dll
Переносит данные из таблиц DataSet в базу данных. Используется SqlBulkCopy. Это самый быстрый и экономичный способ переноса больших объемов данных в базу.

Пространство имён: Nemiro.Data.Sql
Сборка: Nemiro.Data (в Nemiro.Data.dll) Версия: 2.11.4.126 (2.11.4.126)
Синтаксис

public void CopyDataToServer(
	DataSet value
)

Параметры

value
Тип: System.Data DataSet
Экземпляр класса DataSet, данные которого нужно перенести в базу SQL Server.
Исключения

ИсключениеУсловие
ArgumentNullExceptionЕсли value имеет значение null (Nothing).
SqlExceptionИсключение возникает при возврате SQL Server предупреждения или ошибки.
StringOrBinaryDataWouldBeTruncatedExceptionИсключение возникает, если в некоторые поля таблицы добавляются значения, объем которых превышает допустимый размер поля таблицы.
Заметки

Каждый экземпляр коллекции Tables должен содержать имя таблицы назначения в свойстве TableName.

Список полей таблиц должен совпадать с колонками таблиц базы данных, в которые переносятся данные.

Если коллекция таблиц в параметре value пустая, то запрос к базе данных не выполняется.

Если определенная таблица не имеет в коллекции строк данных, то запрос к базе данных для этой таблицы выполняться не будет.

Данные из таблиц переносятся в базу поочередно.

Если в процессе переноса данных в базу возникнет ошибка, то уже перенесенные данные останутся в базе данных.

Используйте этот метод, если необходимо перенести большие объемы данных в базу. Метод работает быстрее и потребляет меньше ресурсов, чем использование SQL-инструкции INSERT INTO.

Параметры кэширования при работе с этим методом игнорируются.

Примеры

В следующем примере в базу данных в таблицы hotels и hotels_images переносятся данные отелей.

Для примера, данные формируются случайным образом.

Для связи фотографий отелей с отелями используются ключи типа Guid, которые создаются программно (чтобы можно было сделать связь данных).

using (SqlClient client = new SqlClient())
{
  // Создаем экземпляр класса DataTable для отелей. 
  // В качестве имени таблицы указываем hotels. 
  // В базе данных SQL Server должна быть таблица с именем hotels.
  DataTable hotels = new DataTable("hotels");
  // Добавляем поля в таблицу. 
  // Все перечисленные поля должны присутствовать в таблице hotels 
  // базы данных SQL Server. 
  // Если в таблице на сервере SQL Server есть идентификаторы-счетчики,  
  // значения для которых сервером формируются автоматически, указывать их не нужно. 
  // Для надежности, рекомендуется указывать тип данных полей (вторым параметром).
  hotels.Columns.Add("id_hotels", typeof(Guid));
  hotels.Columns.Add("hotel_code", typeof(string));
  hotels.Columns.Add("hotel_name", typeof(string));
  hotels.Columns.Add("hotel_stars", typeof(int));
  hotels.Columns.Add("date_created", typeof(DateTime));

  // Создаем экземпляр класса DataTable для фотографий отелей. 
  // В качестве имени таблицы указываем hotels_images. 
  // В базе данных SQL Server должна быть таблица с именем hotels_images.
  DataTable hotelsImages = new DataTable("hotels_images");
  // Добавляем поля в таблицу. 
  // Все перечисленные поля должны присутствовать в таблице hotels 
  // базы данных SQL Server. 
  // Если в таблице на сервере SQL Server есть идентификаторы-счетчики,  
  // значения для которых сервером формируются автоматически, указывать их не нужно. 
  // Для надежности, рекомендуется указывать тип данных полей (вторым параметром).
  hotelsImages.Columns.Add("id_hotels", typeof(Guid)); // поле для связи с hotels
  hotelsImages.Columns.Add("image_url", typeof(string));

  // Генератор случайных чисел, для формирования случайных данных (для примера).
  Random rnd = new Random(DateTime.Now.Millisecond);

  // Добавляем данные, которые нужно перенести в базу SQL Server. 
  for (int i = 0; i <= 1000; i++)
  {
    // В данном примере данные будут случайными. 
    // Создаем идентификатор для отеля.
    Guid newHotelId = Guid.NewId();
    // Генерируем данные отеля.
    hotels.Rows.Add(newHotelId, Guid.NewGuid().ToString().Substring(0, 4), Guid.NewGuid().ToString().Replace("-", ""), rnd.Next(1, 5), DateTime.Now);
    // Добавляем фотографии. 
    int cnt = rnd.Next(0, 9);
    for (int j = 0; j <= cnt; j++)
    {
      // Передаем newHotelId в поле id_hotels, 
      // таким образом фотография будет связана с конкретным отелем.
      hotelsImages.Rows.Add(newHotelId, String.Format("http://example.org/{0}", Guid.NewGuid()));
    }
  }
  // Создаем DataSet.
  DataSet data = new DataSet();
  // Добавляем в DataSet таблицы с данными.
  data.Tables.Add(hotels);
  data.Tables.Add(hotelsImages);
  // Переносим данные в базу данных SQL Server
  client.CopyDataToServer(data);
}
См. также