Чтение онлайн

ЖАНРЫ

Язык программирования C#9 и платформа .NET5
Шрифт:

Теперь, располагая подходящим файлом

appsettings.json
, вы можете читать значения
provider
и
connectionstring
с использованием конфигурации .NET Core. Начните с обновления операторов
using
в верхней части файла
Program.cs
:

using System;

using System.Data.Common;

using System.Data.Odbc;

#if PC

using System.Data.OleDb;

#endif

using System.IO;

using Microsoft.Data.SqlClient;

using Microsoft.Extensions.Configuration;

Очистите

весь код в
Program.cs
и добавьте взамен следующий код:

using System;

using System.Data.Common;

using System.Data.Odbc;

#if PC

using System.Data.OleDb;

#endif

using System.IO;

using Microsoft.Data.SqlClient;

using Microsoft.Extensions.Configuration;

using DataProviderFactory;

Console.WriteLine("***** Fun with Data Provider Factories *****\n");

var (provider, connectionString) = GetProviderFromConfiguration;

DbProviderFactory factory = GetDbProviderFactory(provider);

// Теперь получить объект подключения.

using (DbConnection connection = factory.CreateConnection)

{

if (connection == null)

{

Console.WriteLine($"Unable to create the connection object");

// He удалось создать объект подключения

return;

}

Console.WriteLine($"Your connection object is a: {connection.GetType.Name}");

connection.ConnectionString = connectionString;

connection.Open;

// Создать объект команды.

DbCommand command = factory.CreateCommand;

if (command == null)

{

Console.WriteLine($"Unable to create the command object");

// He удалось создать объект команды

return;

}

Console.WriteLine($"Your command object is a: {command.GetType.Name}");

command.Connection = connection;

command.CommandText =

"Select i.Id, m.Name From Inventory i inner join Makes m on m.Id =

i.MakeId ";

//
Вывести данные с помощью объекта чтения данных.

using (DbDataReader dataReader = command.ExecuteReader)

{

Console.WriteLine($"Your data reader object is a:

{dataReader.GetType.Name}");

Console.WriteLine("\n***** Current Inventory *****");

while (dataReader.Read)

{

Console.WriteLine($"-> Car #{dataReader["Id"]} is a

{dataReader["Name"]}.");

}

}

}

Console.ReadLine;

Добавьте приведенный далее код в конец файла

Program.cs
. Эти методы читают конфигурацию, устанавливают корректное значение
DataProviderEnum
, получают строку подключения и возвращают экземпляр
DbProviderFactory
:

static DbProviderFactory GetDbProviderFactory(DataProviderEnum provider)

=> provider switch

{

DataProviderEnum.SqlServer => SqlClientFactory.Instance,

DataProviderEnum.Odbc => OdbcFactory.Instance,

#if PC

DataProviderEnum.OleDb => OleDbFactory.Instance,

#endif

_ => null

};

static (DataProviderEnum Provider, string ConnectionString)

GetProviderFromConfiguration

{

IConfiguration config = new ConfigurationBuilder

.SetBasePath(Directory.GetCurrentDirectory)

.AddJsonFile("appsettings.json", true, true)

.Build;

var providerName = config["ProviderName"];

if (Enum.TryParse<DataProviderEnum>

(providerName, out DataProviderEnum provider))

{

return (provider,config[$"{providerName}:ConnectionString"]);

};

throw new Exception("Invalid data provider value supplied.");

}

Обратите внимание, что в целях диагностики с помощью служб рефлексии выводятся имена лежащих в основе объектов подключения, команды и чтения данных. В результате запуска приложения в окне консоли отобразятся текущие данные из таблицы

Inventory
базы данных
AutoLot
:

*****

Fun with Data Provider Factories

Поделиться с друзьями: