【问题标题】:No exception when opening SqlConnection in C#在 C# 中打开 SqlConnection 时也不例外
【发布时间】:2013-12-27 19:51:30
【问题描述】:

我正在制作一个连接到本地 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 状态是否正确?

【问题讨论】:

  • 知道有一个 SqlConnectionStringBuilder 类 - 对吧?这将使创建连接字符串变得更加容易(而不是仅仅将它串在一起......)
  • 我不知道。谢谢指点!我正在尝试稳健地构建它,但我对使用 C# 中的数据库不熟悉,所以我可能正在重新发明轮子。

标签: c# sql-server


【解决方案1】:

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

见:Integrated Security -or- Trusted_Connection from SqlConnection.ConnectionString Property

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

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

【讨论】:

    猜你喜欢
    • 2010-10-10
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    相关资源
    最近更新 更多