2012-08-06 166 views
0

我有一個由多個用戶配置的客戶提供的數據庫。每個用戶都有自己的用戶名/密碼等,它們是SQL Server的數據庫登錄名。以編程方式檢查連接字符串的用戶名/密碼?

在傳統軟件中,會要求用戶輸入數據庫和密碼,然後用它們在代碼中形成連接字符串。

我的任務是替換大量的數據庫代碼,並且我需要一種很快地檢查數據庫用戶名和密碼的方法。目前,使用Linq,如果密碼不正確,我最終得到一個System.Data.SqlClient.SqlException,但這需要相當長的時間才能真正拋出(我假設超時?)。

有誰知道一個好方法,我可以快速測試我的用戶名/密碼組合對數據庫?

+0

可能看看這個問題:http://stackoverflow.com/questions/154485/how-to-test-sqlserver-connection-without-opening-a-database。不知道如果密碼不正確,它是否會返回更快的響應。 – 2012-08-06 08:36:40

回答

0

你可以嘗試打開通過ADO連接,以減少超時

SqlConnection conn = new SqlConnection (yourconnectionstring + ";Connection Timeout=1;");   
try 
{ 
    conn.Open(); 
    conn.Close(); 
} 
catch (SqlException ex) 
{ 
    if (ex.Number == 18456) 
    { 
      // invalid login 
    } 
} 

18456是SQL無效的登錄

默認的連接超時是15秒。

+0

如果數據庫服務器正忙於許多連接並且需要等待一段時間才能處理該請求,那麼該怎麼辦?即使用戶和密碼正確,它也表示無效登錄到用戶。 – AnandPhadke 2012-08-06 08:37:23

+0

然後它會失敗。這就是爲什麼默認值是15秒。你可以把它放在不斷增加的超時循環中,或者檢查來自連接異常的確切響應。 – podiluska 2012-08-06 08:38:08

+0

在我的情況下,數據庫服務器從來沒有真的很忙,所以這可能工作得很好,作爲一個解決方法,老實說。我會把它放進測試版本,看看它是否能完成這項工作。 – KingCronus 2012-08-06 09:34:44

-1

我會爭辯說,你不希望數據庫(或任何其他的東西,真的)能夠告訴你,你傳遞的憑據是不正確的。爲什麼?因爲這可以進行強力檢查。即使引入一個小小的延遲也會阻礙這種嘗試。

相關問題