如何测试连接字符串?

时间:2017-05-02 10:32:49

标签: c# connection-string

我有一个简单的问题,我正在尝试检查App.config中的连接字符串是否有效以及服务器&其中的数据库是可访问的。我尝试了以下代码,但它仍然不起作用: -

public static bool checkConnectionString(string con)
{
    if (ConfigurationManager.ConnectionStrings[con].ConnectionString == "" && !checkConnectionStringValidity(con))
    {
        return false;
    }
    else
    {
        return true;
    }
}

public static bool checkConnectionStringValidity(string con)
{
   try {
        using(var connection = new SqlConnection(con)) {
            connection.Open();
            return true;
        }
    } catch {
        return false;
    }
}

然后我在主屏幕中使用上述方法: -

if (Data.checkConnectionString("Utilities"))
{
    Application.Run(new Log_In());
}
else 
{
    Application.Run(new ApplicationMainSettings());  
}

我希望当我在app.config中写错信息时,程序会将我引导至ApplicationMainSettings()屏幕。

3 个答案:

答案 0 :(得分:1)

您的方法看起来很好并且正常工作,问题是if中的&&运算符,由于它的呈现方法checkConnectionStringValidity仅在连接字符串为""时才会调用我认为它不需要检查"",您可以直接使用,如下所示:

if(checkConnectionStringValidity(ConfigurationManager.Connecti‌​onStrings[con].Conne‌​ctionString))
{
    // Proceed the connection is valid
}
else
{
    // Stop here the connection is invalid
}

否则你可以试试!= "" && checkConnectionStringValidity(con)所以只有当连接字符串非空时才调用该方法(因为如果值为空,该方法肯定会返回false)。所以你可以尝试这样:

if (ConfigurationManager.ConnectionStrings[con].ConnectionString != "" && checkConnectionStringValidity(con))
{
    // Proceed the connection is valid
}
else
{
    // Stop here the connection is invalid
}

答案 1 :(得分:0)

重构代码以应用预期的逻辑......

public static bool checkConnectionString(string key) {
    var connectionSetting = ConfigurationManager.ConnectionStrings[key];
    return connectionSetting != null && checkConnectionStringValidity(connectionSetting.ConnectionString);
}

我们首先检查连接设置是否确实存在。

如果是,则可以检查连接字符串。

如果没有,那么你就有可能获得一个空例外。

答案 2 :(得分:0)

您可以尝试此解决方案。

public static bool checkConnectionStringValidity(string con)
{
var _testConnection=false;
try {
        using(var connection = new SqlConnection(con)) {
        if (con.State == ConnectionState.Closed)
        {
            con.Open();
            _testConnection = true;
            con.Close();
        }
    }
} catch {
    _testConnection = false;
}
return _testConnection ;

}

您还需要更改checkConnectionString函数,如下所示。

public static bool checkConnectionString(string con)
{
if(ConfigurationManager.ConnectionStrings[con] !=null)
{
  if (Convert.Tostring( ConfigurationManager.ConnectionStrings[con].ConnectionString) == "" && !checkConnectionStringValidity(con)
  { 
    return false;
  }
  else
  {
     return true;
  }
}
else 
{
     return false;
}
}

如果您有任何疑问,请与我们联系。