Из приведенного выше кода можно сделать вывод, что имя
Initial Catalog
относится к базе данных, с которой необходимо установить сеанс. Имя
Data Source
идентифицирует имя машины, где находится база данных. Здесь применяется строка
"., 5433"
, которая ссылается на хост-машину (точка соответствует
localhost
), и порт 5433, который представляет собой порт контейнера Docker, отображенный на порт SQL Server. Если бы вы использовали другой экземпляр, то определили бы свойство как
имя_машины,порт\экземпляр
. Например,
MYSERVER\SQLSERVER2019
означает, что
MYSERVER
— имя сервера, на котором функционирует SQL Server, что применяется стандартный порт и что
SQLSERVER2019
представляет собой имя экземпляра. Если машина является локальной по отношению к разработке, тогда можете использовать для имени сервера точку (
.
) или маркер (
localhost
). В случае стандартного экземпляра SQL Server имя экземпляра не указывается. Скажем, если вы создаете базу данных
AutoLot
в установленной копии Microsoft SQL Server, настроенной как стандартный экземпляр на вашем локальном компьютере, то могли бы применять
"Data Source=localhost"
.
Кроме того, можно указать любое количество конструкций, которые представляют учетные данные безопасности. Если
Integrated Security
установлено в
true
, то для аутентификации и авторизации используется текущая учетная запись Windows.
Когда строка подключения готова, можно вызывать метод
Open
для установления подключения к базе данных. В дополнение к членам
Connectionstring
,
Open
и
Close
объект подключения предоставляет несколько членов, которые позволяют конфигурировать дополнительные настройки подключения, такие как таймаут и транзакционная информация. В табл. 21.4 кратко описаны избранные члены базового класса
DbConnection
.
Свойства типа
DbConnection
обычно по своей природе допускают только чтение и полезны, только если требуется получить характеристики подключения во время выполнения. Когда необходимо переопределить стандартные настройки, придется изменить саму строку подключения. Например, в следующей строке подключения время таймаута
Connect Timeout
устанавливается равным 30 секундам вместо стандартных 15 секунд (для SQL Server):
using(SqlConnection connection = new SqlConnection)
{
connection.ConnectionString =
@" Data Source=.,5433;User Id=sa;Password=P@ssw0rd;
Initial Catalog=AutoLot;Connect
Timeout=30";
connection.Open;
}
Следующий код выводит детали о переданной ему строке подключения
Большинство этих свойств понятно без объяснений, но свойство
State
требует специального упоминания. Ему можно присвоить
любое значение из перечисления
ConnectionState
:
public enum ConnectionState
{
Broken,
Closed,
Connecting,
Executing,
Fetching,
Open
}
Однако допустимыми значениями
ConnectionState
будут только
ConnectionState.Open
,
ConnectionState.Connecting
и
ConnectionState.Closed
(остальные члены перечисления зарезервированы для будущего использования). Кроме того, закрывать подключение всегда безопасно, даже если его состоянием в текущий момент является
ConnectionState.Closed
.
Работа с объектами ConnectionStringBuilder
Работа со строками подключения в коде может быть утомительной, т.к. они часто представлены в виде строковых литералов, которые в лучшем случае трудно обрабатывать и контролировать на предмет ошибок. Совместимые с .NET Core поставщики данных поддерживают объекты построителей строк подключения, которые позволяют устанавливать пары "имя-значение" с применением строго типизированных свойств. Взгляните на следующую модификацию текущего кода:
var connectionStringBuilder = new SqlConnectionStringBuilder
{
InitialCatalog = "AutoLot",
DataSource = ".,5433",
UserID = "sa",
Password = "P@ssw0rd",
ConnectTimeout = 30
};
connection.ConnectionString =
connectionStringBuilder.ConnectionString;
В этой версии создается экземпляр класса
SqlConnectionStringBuilder
, соответствующим образом устанавливаются его свойства, после чего с использованием свойства
ConnectionString
получается внутренняя строка. Обратите внимание, что здесь применяется стандартный конструктор типа. При желании объект построителя строки подключения для поставщика данных можно также создать, передав в качестве отправной точки существующую строку подключения (что может быть удобно, когда значения динамически читаются из внешнего источника). После наполнения объекта начальными строковыми данными отдельные пары "имя-значение" можно изменять с помощью связанных свойств.
Работа с объектами команд
Теперь, когда вы лучше понимаете роль объекта подключения, следующей задачей будет выяснение, каким образом отправлять SQL-запросы базе данных. Тип
SqlCommand
(производный от
DbCommand
) является объектно-ориентированным представлением SQL-запроса, имени таблицы или хранимой процедуры. Тип команды указывается с использованием свойства
CommandType
, которое принимает любое значение из перечисления
CommandType
:
public enum CommandType
{
StoredProcedure,
TableDirect,
Text // Стандартное значение.
}
При создании объекта команды SQL-запрос можно указывать как параметр конструктора или устанавливать свойство
CommandText
напрямую. Кроме того, когда создается объект команды, необходимо задать желаемое подключение. Его также можно указать в виде параметра конструктора либо с применением свойства