Режим соединения с базой данных.
Значение по умолчанию
Auto, если иное не указано в параметре
NeData:Sql:ConnectionMode файла конфигурации.
Пространство имён: Nemiro.Data.SqlСборка: Nemiro.Data (в Nemiro.Data.dll) Версия: 2.11.4.126 (2.11.4.126)
public ConnectionMode ConnectionMode { get; set; }
public ConnectionMode ConnectionMode { get; set; }
Public Property ConnectionMode As ConnectionMode
Get
Set
Public Property ConnectionMode As ConnectionMode
Get
Set
Значение свойства
Тип:
ConnectionModeЗначение по умолчанию:
Auto, если иное не указано в параметре
NeData:Sql:ConnectionMode файла конфигурации.
В режиме Auto при каждом выполнении запроса к базе данных соединение автоматически открывается, а после - закрывается. Например:
using (SqlClient client = new SqlClient())
{
client.CommandText = "SELECT * FROM table";
DataTable table = client.GetTable();
client.CommandText = "UPDATE table SET hits = hits + 1";
client.ExecuteNonQuery();
}
using (SqlClient client = new SqlClient())
{
// формируем запрос к базе данных
client.CommandText = "SELECT * FROM table";
// выполняем запрос
// при этом открывается соединение с базой данных
DataTable table = client.GetTable();
// после выполнения запроса, соединение автоматически закрывается
// выполняем еще один запрос, соединение опять открывается
client.CommandText = "UPDATE table SET hits = hits + 1";
client.ExecuteNonQuery();
// после выполнения запроса, соединение автоматически закрывается
// и т.д.
}
Using client As New SqlClient()
client.CommandText = "SELECT * FROM table"
Dim table As DataTable = client.GetTable()
client.CommandText = "UPDATE table SET hits = hits + 1"
client.ExecuteNonQuery()
End Using
Using client As New SqlClient()
' формируем запрос к базе данных
client.CommandText = "SELECT * FROM table"
' выполняем запрос
' при этом открывается соединение с базой данных
Dim table As DataTable = client.GetTable()
' после выполнения запроса, соединение автоматически закрывается
' выполняем еще один запрос, соединение опять открывается
client.CommandText = "UPDATE table SET hits = hits + 1"
client.ExecuteNonQuery()
' после выполнения запроса, соединение автоматически закрывается
' и т.д.
End Using
В режиме Auto не стоит беспокоиться о том, что соединение с базой данных может остаться открытым.
В случае, если в процессе выполнения запроса возникает исключение (ошибка), то соединение закрывается, а лишь затем исключение передается приложению.
В большинстве случаев такой подход оправдан.
Однако, если в рамках одно цикла жизни экземпляра класса SqlClient необходимо выполнить серию запросов к базе данных, то имеет смысл использовать одно соединение.
Для реализации этого, достаточно переключить ConnectionMode в ручной режим (Manual).
Но тогда придется самостоятельно закрывать соединения, и писать дополнительный код на случаи возникнования исключений в процессе выполнения запросов к базе данных,
чтобы не оставалось открытых соединений, число которых, как известно, ограничено.
Строго говоря, в ручном режиме соединение открывается автоматически, при первой необходимости. Вручную его нужно только закрывать.
При вызове метода Dispose соединение автоматически закрывается, независимо от значения ConnectionMode.
В следующем примере выполняться серия запросов к базе данных с использованием одного открытого соединения. При этом выполняется перехват исключений и ручное закрытие соединения с базой данных. Использование оператора using в данном случае невозможно.
SqlClient client = new SqlClient();
client.ConnectionMode = ConnectionMode.Manual;
try
{
client.ExecuteNonQuery("INSERT INTO table (date) VALUES (GETDATE());");
client.ExecuteNonQuery("INSERT INTO table (date) VALUES (GETDATE());");
client.ExecuteNonQuery("INSERT INTO table (date) VALUES (GETDATE());");
client.ExecuteNonQuery("INSERT INTO table (date) VALUES (GETDATE());");
client.ExecuteNonQuery("INSERT INTO table (date) VALUES (GETDATE());");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
client.Disconnect();
}
// создаем экземпляр класса SqlClient
SqlClient client = new SqlClient();
// переключаемся в ручной режим управления соединением
client.ConnectionMode = ConnectionMode.Manual;
try
{
// выполняем серию из пяти запросов в безопасном блоке кода
client.ExecuteNonQuery("INSERT INTO table (date) VALUES (GETDATE());");
client.ExecuteNonQuery("INSERT INTO table (date) VALUES (GETDATE());");
client.ExecuteNonQuery("INSERT INTO table (date) VALUES (GETDATE());");
client.ExecuteNonQuery("INSERT INTO table (date) VALUES (GETDATE());");
client.ExecuteNonQuery("INSERT INTO table (date) VALUES (GETDATE());");
}
catch (Exception ex)
{
// выводим сообщение об ошибке,
// если в процессе выполнения запросов возникнет исключение
Console.WriteLine(ex.Message);
}
finally
{
// вручную закрываем соединение с базой данных
client.Disconnect();
}
Dim client As new SqlClient()
client.ConnectionMode = ConnectionMode.Manual
Try
client.ExecuteNonQuery("INSERT INTO table (date) VALUES (GETDATE());")
client.ExecuteNonQuery("INSERT INTO table (date) VALUES (GETDATE());")
client.ExecuteNonQuery("INSERT INTO table (date) VALUES (GETDATE());")
client.ExecuteNonQuery("INSERT INTO table (date) VALUES (GETDATE());")
client.ExecuteNonQuery("INSERT INTO table (date) VALUES (GETDATE());")
Catch ex As Exception
Console.WriteLine(ex.Message)
Finally
client.Disconnect()
End Try
' создаем экземпляр класса SqlClient
Dim client As new SqlClient()
' переключаемся в ручной режим управления соединением
client.ConnectionMode = ConnectionMode.Manual
Try
' выполняем серию из пяти запросов в безопасном блоке кода
client.ExecuteNonQuery("INSERT INTO table (date) VALUES (GETDATE());")
client.ExecuteNonQuery("INSERT INTO table (date) VALUES (GETDATE());")
client.ExecuteNonQuery("INSERT INTO table (date) VALUES (GETDATE());")
client.ExecuteNonQuery("INSERT INTO table (date) VALUES (GETDATE());")
client.ExecuteNonQuery("INSERT INTO table (date) VALUES (GETDATE());")
Catch ex As Exception
' выводим сообщение об ошибке,
' если в процессе выполнения запросов возникнет исключение
Console.WriteLine(ex.Message)
Finally
' вручную закрываем соединение с базой данных
client.Disconnect()
End Try