【问题标题】:if SqlConnection C# Check Connection open , close如果 SqlConnection C# 检查连接打开,关闭
【发布时间】:2015-09-02 03:27:39
【问题描述】:

我的代码不想返回关闭连接。 如果我没有太多知识,我将无法使用它们。

 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);


              }

        }

【问题讨论】:

    标签: c


    【解决方案1】:

    当您创建新连接时,最初它始终是关闭的。然后,您需要打开它。但是,您在打开连接之前检查它是否处于打开状态。

    此后,在您的情况下,此条件将永远不会是 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_errorinfo_warning 等实现为(string message, params string[] args) 并使用String.Format。可能会更方便:

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

    【讨论】:

    • @GuilhermeHenrique 您的配置文件中有一个连接字符串。有一个值ConnectionTimeout。如果设置为 10 秒,那么它将等待连接 10 秒,然后假设它已超时并抛出错误。您可以在那里分配一个较小的值。
    • no app.config :c
    • @GuilhermeHenrique 看起来 10 秒是默认值。尝试在connectionString 的末尾添加;ConnectionTimeout=2 Password
    • connectionString="Data Source=*;Initial Catalog=Db_Tank;Persist Security Info=True;User ID=sa;Password=Fnando@123 ;ConnectionTimeout=2" ?
    猜你喜欢
    • 1970-01-01
    • 2010-12-20
    • 2015-09-11
    • 2011-10-20
    • 1970-01-01
    • 2012-09-19
    • 2013-04-25
    • 2017-12-01
    • 1970-01-01
    相关资源
    最近更新 更多