Для работы с базой данных MS SQL Server в .NET 5 и выше (а также .NET Core 3.0/3.1) необходимо установить в проект через nuget пакет Microsoft.Data.SqlClient:
Для создания подключения к MS SQL Server применяется класс SqlConnection из пространства имен Microsoft.Data.SqlClient.
Этот класс имеет три конструктора:
SqlConnection() SqlConnection(String) SqlConnection(String, SqlCredential)
Второй и третий конструкторы в качестве первого параметра принимают строку подключения. Третий конструктор также принимает объект
SqlCredential
, который фактически представляет логин и пароль.
Теперь проверим подключение на примере сервера LocalDB:
using Microsoft.Data.SqlClient; using System; using System.Data; using System.Threading.Tasks; namespace HelloApp { class Program { static async Task Main(string[] args) { string connectionString = "Server=(localdb)\\mssqllocaldb;Database=master;Trusted_Connection=True;"; // Создание подключения SqlConnection connection = new SqlConnection(connectionString); try { // Открываем подключение await connection.OpenAsync(); Console.WriteLine("Подключение открыто"); } catch (SqlException ex) { Console.WriteLine(ex.Message); } finally { // если подключение открыто if (connection.State == ConnectionState.Open) { // закрываем подключение await connection.CloseAsync(); Console.WriteLine("Подключение закрыто..."); } } Console.WriteLine("Программа завершила работу."); Console.Read(); } } }
В данном случае подключение осуществляется к серверу LocalDB и его базе данных master
(по умолчанию база данных master уже
должна быть на любом MS SQL Servere).
Для начала взаимодействия с базой данных нам надо открыть подключение с помощью методов Open()
(синхронный) или
OpenAsync()
(асинхронный).
По окончании работы с SqlConnection необходимо закрыть подключение к серверу, вызвав метод Close()/CloseAsync() или
Dispose()/DisposeAsync(). В данном случае вначале проверяем, что подключение открыто и, если оно открыто, вызываем
асинхронный метод OpenAsync()
.
В итоге, если указана валидная строка подключения, то мы должны увидеть на консоли следующие строки:
Подключение открыто Подключение закрыто... Программа завершила работу.
Вместо явного закрытия подключения также можно использовать конструкцию using
, которая автоматически закрывает подключение:
using Microsoft.Data.SqlClient; using System; using System.Threading.Tasks; namespace HelloApp { class Program { static async Task Main(string[] args) { string connectionString = "Server=(localdb)\\mssqllocaldb;Database=master;Trusted_Connection=True;"; using(SqlConnection connection = new SqlConnection(connectionString)) { await connection.OpenAsync(); Console.WriteLine("Подключение открыто"); } Console.WriteLine("Подключение закрыто..."); Console.WriteLine("Программа завершила работу."); Console.Read(); } } }
Объект SqlConnection обладает рядом свойств, которые позволяют получить информацию о подключении:
using Microsoft.Data.SqlClient; using System; using System.Threading.Tasks; namespace HelloApp { class Program { static async Task Main(string[] args) { string connectionString = "Server=(localdb)\\mssqllocaldb;Database=master;Trusted_Connection=True;"; using(SqlConnection connection = new SqlConnection(connectionString)) { await connection.OpenAsync(); Console.WriteLine("Подключение открыто"); // Вывод информации о подключении Console.WriteLine("Свойства подключения:"); Console.WriteLine($"\tСтрока подключения: {connection.ConnectionString}"); Console.WriteLine($"\tБаза данных: {connection.Database}"); Console.WriteLine($"\tСервер: {connection.DataSource}"); Console.WriteLine($"\tВерсия сервера: {connection.ServerVersion}"); Console.WriteLine($"\tСостояние: {connection.State}"); Console.WriteLine($"\tWorkstationld: {connection.WorkstationId}"); } Console.WriteLine("Подключение закрыто..."); Console.WriteLine("Программа завершила работу."); Console.Read(); } } }
Подключение открыто Свойства подключения: Строка подключения: База данных: master Сервер: (localdb)\mssqllocaldb Версия сервера: 15.00.2000 Состояние: Open WorkstationId: EUGENEPC Подключение закрыто... Программа завершила работу.