Действительно ли это возможное использование является оператором C# SQL использования?
private static void CreateCommand(string queryString,
string connectionString)
{
using (SqlConnection connection = new SqlConnection(
connectionString))
{
SqlCommand command = new SqlCommand(queryString, connection);
command.Connection.Open();
command.ExecuteNonQuery();
}
}
Что, если существует ошибка при открытии соединения?
Оператор использования, пытаются наконец
Никакая выгода
Таким образом, если я поймаю вне скобок использования, то выгода зафиксирует соединение вводная ошибка?
В противном случае, как реализовать это с использованием using
оператор показанный выше?
Это можно сделать на C # (я также вижу, что код точно отображается в MSDN http://msdn.microsoft.com/en-us/library/system.data .sqlclient.sqlcommand.executenonquery.aspx ). Однако, если вам нужно действовать в защитной манере и, например, регистрировать возможные исключения, которые могут помочь в устранении неполадок в производственной среде, вы можете воспользоваться следующим подходом:
private static void CreateCommand(string queryString,
string connectionString)
{
using (SqlConnection connection = new SqlConnection(
connectionString))
{
try
{
SqlCommand command = new SqlCommand(queryString, connection);
command.Connection.Open();
command.ExecuteNonQuery();
}
catch (InvalidOperationException)
{
//log and/or rethrow or ignore
}
catch (SqlException)
{
//log and/or rethrow or ignore
}
catch (ArgumentException)
{
//log and/or rethrow or ignore
}
}
}
Если вы хотите поймать любую ошибку, то вам нужно обернуть все в блок try
- catch
. using
блоки просто обеспечивают утилизацию неуправляемых ресурсов, они не могут обрабатывать исключения.
Кроме того, SqlCommand
реализует IDisposable
, поэтому я бы предложил поместить его в блок using
.
Просто напишите это явно:
SqlConnection connection = new SqlConnection(connectionString);
try
{
using (SqlCommand command = new SqlCommand(queryString, connection))
{
command.Connection.Open();
command.ExecuteNonQuery();
}
}
catch (Exception e)
{
// ...handle, rethrow. Also, you might want to catch
// more specific exceptions...
}
finally
{
connection.Close();
}
Да, вы можете поместить блок using
в блок try
, а следующий блок catch
будет отлавливать любые ошибки, связанные с блоком try
.