2017-05-02 66 views
-4

我有一個簡單的問題,我試圖檢查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()屏幕。

+6

不應該傳遞實際的連接字符串嗎? '...!checkConnectionStringValidity(ConfigurationManager.ConnectionStrings [con] .ConnectionString))' –

+0

您對callConnectionStringValidity的調用不會傳遞實際的連接字符串。 – Simon

+1

看來你在問之前還沒有調試過它。你只是從方法中解析字符串,而不是從App.config中解析。編輯:帕特里克和西蒙已經指出了這一點 – bslein

回答

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

或者更改||中的&& – Steve

+0

@Steve:那太好了,但沒有必要,如果它是空的,意味着方法將返回'false'。我已更新帖子\ –

0

重構代碼應用預期邏輯...

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

我們首先檢查連接設置實際存在。

如果是這樣,那麼你可以檢查連接字符串。

如果沒有,那麼你運行得到一個空例外的機會。

+0

爲什麼...........? –

+0

廢話!!!!!!! – Medo

+0

@新我看到我犯了錯誤。使用了錯誤的方法。我的錯。 – Nkosi

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

讓我知道你是否有任何疑問。

+0

不能工作親愛的 – Medo

+0

請分享哪些函數返回false的詳細信息? – Leena

+0

@Medo我做了代碼更改。嘗試一下。 – Leena