Язык программирования C#9 и платформа .NET5
Часть 405 из 642 Информация о книге
public string GetString(int i) => throw new NotImplementedException();public decimal GetDecimal(int i) => throw new NotImplementedException();public DateTime GetDateTime(int i) => throw new NotImplementedException();public IDataReader GetData(int i) => throw new NotImplementedException();public bool IsDBNull(int i) => throw new NotImplementedException();object IDataRecord.this[int i] => throw new NotImplementedException();object IDataRecord.this[string name] => throw new NotImplementedException();public void Close() => throw new NotImplementedException();public DataTable GetSchemaTable() => throw new NotImplementedException();public bool NextResult() => throw new NotImplementedException();public int Depth { get; }public bool IsClosed { get; }public int RecordsAffected { get; }Выполнение массового копирования
Добавьте в папку
новый файл открытого статического класса по имениBulkImport. Поместите в начало файла следующие операторыProcessBulkImport.cs:usingusing System;using System.Collections.Generic;using System.Data;using System.Linq;using Microsoft.Data.SqlClient;Добавьте код для поддержки открытия и закрытия подключений (похожий на код в классе
):InventoryDalprivate const string ConnectionString =@"Data Source=.,5433;User Id=sa;Password=P@ssw0rd;Initial Catalog=AutoLot";private static SqlConnection _sqlConnection = null;private static void OpenConnection(){_sqlConnection = new SqlConnection{ConnectionString = ConnectionString};_sqlConnection.Open();}private static void CloseConnection(){if (_sqlConnection?.State != ConnectionState.Closed){_sqlConnection?.Close();}}Для обработки записей классу
требуется имя (и схема, если она отличается отSqlBulkCopy). После создания нового экземпляраdbo(с передачей объекта подключения) установите свойствоSqlBulkCopy. Затем создайте новый экземпляр специального класса чтения данных, который хранит список объектов, подлежащих массовому копированию, и вызовите методDestinationTableName. Ниже приведен код методаWriteToServer():ExecuteBulklmport()public static void ExecuteBulkImport<T>(IEnumerable<T> records,string tableName){OpenConnection();using SqlConnection conn = _sqlConnection;SqlBulkCopy bc = new SqlBulkCopy(conn){DestinationTableName = tableName};var dataReader = new MyDataReader<T>(records.ToList(),_sqlConnection,"dbo",tableName);try{bc.WriteToServer(dataReader);}catch (Exception ex){// Здесь должно что-то делаться.}finally{CloseConnection();}}Тестирование массового копирования
Возвратите в проект
и добавьте вAutoLot.Clientследующие операторыProgram.cs:usingusing AutoLot.Dal.BulkImport;using SystemCollections.Generic;Добавьте в файл
новый метод по имениProgram.cs. Создайте список объектовDoBulkCopy()и передайте его вместе с именем таблицы методуCar. Оставшаяся часть кода отображает результаты массового копирования.ExecuteBulklmport()void DoBulkCopy(){Console.WriteLine(" ************** Do Bulk Copy ************** ");var cars = new List<Car>{new Car() {Color = "Blue", MakeId = 1, PetName = "MyCar1"},new Car() {Color = "Red", MakeId = 2, PetName = "MyCar2"},new Car() {Color = "White", MakeId = 3, PetName = "MyCar3"},