// 1. Получаем фабрику для нужного провайдера
// Вместо "System.Data.SqlClient" можно подставить "Npgsql", "MySql.Data.MySqlClient" и т.д.
DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.SqlClient");
// 2. Создаём соединение через фабрику (не SqlConnection, а DbConnection!)
// DbConnection — это абстрактный класс, фабрика создает конкретный объект
using DbConnection connection = factory.CreateConnection();
connection.ConnectionString = "Server=(local)\\MSSQLLocalDB;Database=Library;Integrated Security=true";
// 3. Создаём команду через ту же фабрику
using DbCommand command = factory.CreateCommand();
command.Connection = connection;
command.CommandText = "SELECT FirstName, LastName FROM Authors";
// 4. Открываем соединение
connection.Open();
Console.WriteLine("Подключение открыто");
// 5. DbDataReader — абстрактный читатель (вместо SqlDataReader)
using DbDataReader reader = command.ExecuteReader();
// 6. Читаем данные (код не изменится, даже если сменить БД!)
while (reader.Read())
{
// Доступ к столбцам по имени (работает с любой БД)
Console.WriteLine($"{reader["FirstName"]} {reader["LastName"]}");
}