2015-09-02 3 views
0

Мой код не хочет возвращать тесное соединение. Я не могу их использовать, если у меня мало знаний.если SqlConnection C# Проверить соединение открыто, закройте

private void button1_Click(object sender, EventArgs e) 
    { 
     string connectionString = GetCString(); 

     using (SqlConnection connection = new SqlConnection(connectionString)) 


      if (connection.State == ConnectionState.Open) 
      { 
       connection.Open(); 
       Logger.getS().info_warning("Conexão Sucedida"); 
       Logger.getS().info_warning("DataSource : " + connection.DataSource); 
       Logger.getS().info_warning("Banco De Dados : " + connection.Database); 
       Logger.getS().info_warning("Versão do SQL : " + connection.ServerVersion); 
       Logger.getS().info_warning("Status : " + connection.State); 

       { 

       } 

      } 
       else 
       { 

        Logger.getS().info_erro("SqlConnection Não foi possivel connectar."); 
        Logger.getS().info_erro(" Status da Conexão : " + connection.State); 


       } 

     } 

ответ

0

Когда вы создаете новое соединение, изначально оно всегда закрыто. Затем вам нужно открыть его. Однако перед открытием вы проверяете соединение для открытия.

После этого, это условие никогда не будет true в вашем случае:

if (connection.State == ConnectionState.Open) 

Кроме того, вам не нужно, чтобы проверить соединение для его состояние. Если соединение не удастся, оно выдает исключение. Вы можете просто открыть соединение и быть уверенным, что он будет либо работать правильно, либо выбросить исключение.

Это должно быть как:

try 
{ 
    string connectionString = GetCString(); 

    using (SqlConnection connection = new SqlConnection(connectionString)) 
    { 
     connection.Open(); 
     Logger.getS().info_warning("Conexão Sucedida"); 
     Logger.getS().info_warning("DataSource : " + connection.DataSource); 
     Logger.getS().info_warning("Banco De Dados : " + connection.Database); 
     Logger.getS().info_warning("Versão do SQL : " + connection.ServerVersion); 
     Logger.getS().info_warning("Status : " + connection.State); 
    } 
} 
catch (Exception ex) 
{ 
    Logger.getS().info_error("SqlConnection Não foi possivel connectar."); 
    Logger.getS().info_error("SqlConnection exception message: " + ex.Message + "\r\n" + ex.StackTrace); 
} 

P.S. Вы можете реализовать свои info_error, info_warning и т. Д. Как (string message, params string[] args) и использовать String.Format. Это, вероятно, будет более удобным:

Logger.getS().info_warning("Versão do SQL: {0}", connection.ServerVersion); 
+0

Нормальный занимает 10 секунд до ошибки? –

+0

@GuilhermeHenrique У вас есть строка подключения в вашем файле конфигурации. Существует значение «ConnectionTimeout». Если он установлен на 10 секунд, он будет ждать соединение в течение 10 секунд, а затем предположим, что он отключен и выдает ошибку. Вы можете назначить меньшее значение там. –

+0

<конфигурация> <добавить имя = "GetCString" ConnectionString = "Источник данных = ***; Initial Catalog = Db_Tank ; Упорство Security Info = True; User ID = са; Password = ***» ProviderName = "System.Data.SqlClient" /> нет app.config: гр –

Смежные вопросы