我有一个简单的问题,我正在尝试检查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()
屏幕。
答案 0 :(得分:1)
您的方法看起来很好并且正常工作,问题是if中的&&
运算符,由于它的呈现方法checkConnectionStringValidity
仅在连接字符串为""
时才会调用我认为它不需要检查""
,您可以直接使用,如下所示:
if(checkConnectionStringValidity(ConfigurationManager.ConnectionStrings[con].ConnectionString))
{
// 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;
}
}
如果您有任何疑问,请与我们联系。