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

5

我正在开发一个连接本地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时,即使使用无意义的连接字符串,也会显示为open状态。

我是否对异常捕获的工作原理存在问题?如果由于凭证错误而无法连接到数据库,我是否正确地认为SqlConnection状态不应处于打开状态?


2
дҪ зҹҘйҒ“жңүдёҖдёӘSqlConnectionStringBuilderзұ»еҗ—пјҹдҪҝз”Ёе®ғеҸҜд»ҘжӣҙиҪ»жқҫең°еҲӣе»әиҝһжҺҘеӯ—з¬ҰдёІпјҲиҖҢдёҚд»…д»…жҳҜе°Ҷе…¶дёІеңЁдёҖиө·...пјүгҖӮ - marc_s
我不知道这个。谢谢你的指点!我正在尝试构建一个强大的系统,但是我在使用C#处理数据库方面还很新手,所以可能会重复造轮子。 - TylerReid
1个回答

5
在你的连接字符串中,有一个"Trusted_Connection=yes;",它将使用当前Windows账户进行身份验证,并忽略在连接字符串中提供的用户名和密码。
请参阅:Integrated Security -or- Trusted_Connection from SqlConnection.ConnectionString Property 当为false时,需要在连接中指定用户ID和密码。当为true时,将使用当前Windows账户凭据进行身份验证。可识别的值为true、false、yes、no和sspi(强烈推荐),它等同于true。
如果指定了用户ID和密码,并且Integrated Security设置为true,则会忽略用户ID和密码,并使用Integrated Security。SqlCredential是一种更安全的方式,用于为使用SQL Server认证(Integrated Security=false)的连接指定凭据。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接