在C#中打开SqlConnection时没有异常

时间:2013-12-27 19:51:30

标签: c# sql-server

我正在创建一个连接到本地SQL Server数据库的应用程序,我使用以下方法创建连接字符串并测试异常。

public void connect(string user, string password, string server, string database)
    {
        connectString = "user id=" + user + ";" +
                        "password=" + password + ";" +
                        "server=" + server + ";" +
                        "Trusted_Connection=yes;" +
                        "database=" + database + ";" +
                        "connection timeout=5";
        myConnection = new SqlConnection(connectString);
        try
        {
            myConnection.Open();
            isConnected = true;
        }
        catch (SqlException)
        {
            isConnected = false;
        }
        catch (InvalidOperationException)
        {
            isConnected = false;
        }
    }

根据我的研究,如果无法打开连接,则应该抛出异常,但如果我传递无意义凭证或空字符串,则不会抛出异常。如果我传入正确的信息,我可以连接并使用连接字符串来提取数据。使用错误的连接字符串,稍后在尝试使用数据填充SqlDataAdapter时会出现异常。

另外,当我调试并检查时,无意义的连接字符串myConnection.State是打开的。

我对异常捕获应该如何工作的理解是否存在问题?我是否认为当由于凭据错误而无法连接到数据库时SqlConnection状态不应该打开?

1 个答案:

答案 0 :(得分:5)

在您的连接字符串中,您"Trusted_Connection=yes;"将使用当前的Windows帐户进行身份验证,并忽略连接字符串中提供的用户名和密码。

请参阅:Integrated Security -or- Trusted_Connection from SqlConnection.ConnectionString Property

  

如果为false,则在连接中指定用户ID和密码。什么时候   是的,当前的Windows帐户凭据用于   认证。识别的值是true,false,yes,no和sspi   (强烈推荐),相当于真实。

     

如果指定了用户ID和密码且Integrated Security设置为true,则将忽略用户ID和密码并集成   将使用安全性。 SqlCredential是一种更安全的指定方式   使用SQL Server身份验证的连接的凭据   (综合安全=假)。