Язык программирования 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
Поделиться с друзьями: