Рейтинговые книги
Читем онлайн Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 401 402 403 404 405 406 407 408 409 ... 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. Поместите в начало файла следующие операторы using:

using System;

using System.Collections.Generic;

using System.Data;

using System.Linq;

using Microsoft.Data.SqlClient;

Добавьте код для поддержки открытия и закрытия подключений (похожий на код в классе InventoryDal):

private 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():

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

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 следующие операторы using:

using 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"},

1 ... 401 402 403 404 405 406 407 408 409 ... 642
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю бесплатно.
Похожие на Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю книги

Оставить комментарий