2012-08-06 170 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

我会争辩说,你不希望数据库(或任何其他的东西,真的)能够告诉你,你传递的凭据是不正确的。为什么?因为这可以进行强力检查。即使引入一个小小的延迟也会阻碍这种尝试。

相关问题