KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Базы данных » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

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

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Троелсен Эндрю, "Язык программирования C#9 и платформа .NET5" бесплатно, без регистрации.
Перейти на страницу:

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

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

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*