Переносит данные из таблиц DataSet в базу данных.
Используется SqlBulkCopy.
Это самый быстрый и экономичный способ переноса больших объемов данных в базу.
Пространство имён: Nemiro.Data.SqlСборка: Nemiro.Data (в Nemiro.Data.dll) Версия: 2.11.4.126 (2.11.4.126)
public void CopyDataToServer(
DataSet value
)
public void CopyDataToServer(
DataSet value
)
Public Sub CopyDataToServer (
value As DataSet
)
Public Sub CopyDataToServer (
value As DataSet
)
Параметры
- 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 = new DataTable("hotels");
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 hotelsImages = new DataTable("hotels_images");
hotelsImages.Columns.Add("id_hotels", typeof(Guid));
hotelsImages.Columns.Add("image_url", typeof(string));
Random rnd = new Random(DateTime.Now.Millisecond);
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++)
{
hotelsImages.Rows.Add(newHotelId, String.Format("http://example.org/{0}", Guid.NewGuid()));
}
}
DataSet data = new DataSet();
data.Tables.Add(hotels);
data.Tables.Add(hotelsImages);
client.CopyDataToServer(data);
}
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);
}
Using client As New SqlClient()
Dim hotels As New DataTable("hotels")
hotels.Columns.Add("id_hotels", GetType(Guid))
hotels.Columns.Add("hotel_code", GetType(String))
hotels.Columns.Add("hotel_name", GetType(String))
hotels.Columns.Add("hotel_stars", GetType(Integer))
hotels.Columns.Add("date_created", GetType(DateTime))
Dim hotelsImages As New DataTable("hotels_images")
hotelsImages.Columns.Add("id_hotels", GetType(Guid))
hotelsImages.Columns.Add("image_url", GetType(String))
Dim rnd As New Random(DateTime.Now.Millisecond)
For i As Integer = 0 To 1000
Dim newHotelId As Guid = Guid.NewId()
hotels.Rows.Add(newHotelId, Guid.NewGuid().ToString().Substring(0, 4), Guid.NewGuid().ToString().Replace("-", ""), rnd.Next(1, 5), DateTime.Now)
Dim cnt As Integer = rnd.Next(0, 9)
For j As Integer = 0 To cnt
hotelsImages.Rows.Add(newHotelId, String.Format("http://example.org/{0}", Guid.NewGuid()))
Next
Next
Dim data As New DataSet()
data.Tables.Add(hotels)
data.Tables.Add(hotelsImages)
client.CopyDataToServer(data)
End Using
Using client As New SqlClient()
' Создаем экземпляр класса DataTable для отелей.
' В качестве имени таблицы указываем hotels.
' В базе данных SQL Server должна быть таблица с именем hotels.
Dim hotels As New DataTable("hotels")
' Добавляем поля в таблицу.
' Все перечисленные поля должны присутствовать в таблице hotels
' базы данных SQL Server.
' Если в таблице на сервере SQL Server есть идентификаторы-счетчики,
' значения для которых сервером формируются автоматически, указывать их не нужно.
' Для надежности, рекомендуется указывать тип данных полей (вторым параметром).
hotels.Columns.Add("id_hotels", GetType(Guid))
hotels.Columns.Add("hotel_code", GetType(String))
hotels.Columns.Add("hotel_name", GetType(String))
hotels.Columns.Add("hotel_stars", GetType(Integer))
hotels.Columns.Add("date_created", GetType(DateTime))
' Создаем экземпляр класса DataTable для фотографий отелей.
' В качестве имени таблицы указываем hotels_images.
' В базе данных SQL Server должна быть таблица с именем hotels_images.
Dim hotelsImages As New DataTable("hotels_images")
' Добавляем поля в таблицу.
' Все перечисленные поля должны присутствовать в таблице hotels
' базы данных SQL Server.
' Если в таблице на сервере SQL Server есть идентификаторы-счетчики,
' значения для которых сервером формируются автоматически, указывать их не нужно.
' Для надежности, рекомендуется указывать тип данных полей (вторым параметром).
hotelsImages.Columns.Add("id_hotels", GetType(Guid)) ' поле для связи с hotels
hotelsImages.Columns.Add("image_url", GetType(String))
' Генератор случайных чисел, для формирования случайных данных (для примера).
Dim rnd As New Random(DateTime.Now.Millisecond)
' Добавляем данные, которые нужно перенести в базу SQL Server.
For i As Integer = 0 To 1000
' В данном примере данные будут случайными.
' Создаем идентификатор для отеля.
Dim newHotelId As Guid = Guid.NewId()
' Генерируем данные отеля.
hotels.Rows.Add(newHotelId, Guid.NewGuid().ToString().Substring(0, 4), Guid.NewGuid().ToString().Replace("-", ""), rnd.Next(1, 5), DateTime.Now)
' Добавляем фотографии.
Dim cnt As Integer = rnd.Next(0, 9)
For j As Integer = 0 To cnt
' Передаем newHotelId в поле id_hotels,
' таким образом фотография будет связана с конкретным отелем.
hotelsImages.Rows.Add(newHotelId, String.Format("http://example.org/{0}", Guid.NewGuid()))
Next
Next
' Создаем DataSet.
Dim data As New DataSet()
' Добавляем в DataSet таблицы с данными.
data.Tables.Add(hotels)
data.Tables.Add(hotelsImages)
' Переносим данные в базу данных SQL Server
client.CopyDataToServer(data)
End Using