为什么我的 SQL 连接超时?

Why is my SQL Connection Timing out?

在我的独立 Windows 应用程序中,我有一个连接字符串:

Private Const _sqlDB As String = "Data Source=(localdb)\v11.0;Initial Catalog=localACETest;Integrated Security=True;AttachDbFileName=C:\ACE DB\localACETest.mdf"

我要向其添加连接超时(没关系,这是一个荒谬的长超时):

";Connect Timeout=1000"

谁能解释为什么我的程序现在超时,而在添加连接超时之前没有?

以下是我创建连接的方式:

        _conn = New SqlConnection(_sqlDB)
        _conn.Open()

        Dim _dr As SqlDataReader
        Dim _cmd As New SqlCommand("Random Stored Procedure", _conn)
        _cmd.Parameters.Add("@BusGrp", System.Data.SqlDbType.NVarChar).Value = bg
        _cmd.CommandType = System.Data.CommandType.StoredProcedure

当我删除连接超时并添加命令超时时,这似乎没有发生,但是:

        _cmd.CommandTimeout = 1000

虽然我知道命令和连接超时是两个不同的东西,但添加 connection 超时来延长默认值对我来说没有意义会导致这个问题.

要在连接字符串中使用的关键字是 ConnectTimeout(无 space)或 Connection Timeout,如 here 所示。您在 Connect Timeout 中有一个 space,如果您设置它并删除行 _cmd.CommandTimeout = 1000,它可能会忽略连接字符串值,因为它是不正确的关键字并使用默认值 15 秒。

尝试更改您的连接字符串以使用 Connection Timeout=1000

您使用的 属性 连接超时不正确:

Connect Timeout=1000

应该是

Connection Timeout=1000

Connection TimeoutMSDN documentation 中概述了正确的 属性。 这是使用 SQL 数据库的正确方法(摘自同一 MSDN 文档):

正如评论中所讨论的,您实际上是在 连接 到 SQL 服务器,这里有更好的方法:

Sub connectToDb()
    myConn = New SqlConnection("Server=(local);Database=[.database name here.];User Id=[.username here.];Password=[.password here.];")
    Dim returnValue As Object
    cmd.CommandType = CommandType.Text
    cmd.Connection = myConn

    Try
        myConn.Open()
        MsgBox("Connected to SQL")
    Catch excep As Exception
        MsgBox("An error occurred: " + excep.Message)
    End Try
End Sub

要查询数据库,您可以使用:

    cmd.CommandText = "USE [.database name.]"
    cmd.ExecuteScalar()
    cmd.CommandText = "[.SQL query.]"
    returnValue = cmd.ExecuteScalar() 'You can check the returnValue to see if the query returned anything.

如果您遇到无法同时执行多个查询的错误,则必须通过将 MultipleActiveResultSets=True; 附加到您的连接字符串来启用 MARS