我正在创建一个连接到本地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状态不应该打开?
答案 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身份验证的连接的凭据 (综合安全=假)。