在C#中打开SqlConnection时没有exception

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

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

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

此外,使用无意义的连接字符串myConnection.State在我调试并检查时打开。

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

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

请参阅: 集成安全性 – 或 – 来自SqlConnection.ConnectionString属性的 Trusted_Connection

如果为false,则在连接中指定用户ID和密码。 如果为true,则使用当前Windows帐户凭据进行身份validation。 识别的值是true,false,yes,no和sspi(强烈推荐),这相当于true。

如果指定了用户ID和密码并且Integrated Security设置为true,则将忽略用户ID和密码,并将使用 Integrated Security。 SqlCredential是一种更安全的方法,用于为使用SQL Server身份validation的连接指定凭据(Integrated Security = false)。