简体   繁体   中英

Why is my SQL Connection Timing out?

In my standalone Windows application I have a connection string:

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

To which I am adding a connect timeout (nevermind that this is an absurdly long timeout):

";Connect Timeout=1000"

Can anyone explain why I have procedures now timing out that were NOT prior to adding the connect timeout?

Here's how I create the connections:

        _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

This doesn't seem to happen when I remove the connect timeout and add a command timeout, however:

        _cmd.CommandTimeout = 1000

While I understand that a command & connection timeout are two different things, it doesn't make sense to me that adding a connection timeout to extend the default would cause this problem.

You are using the incorrect property for a Connection Timeout:

Connect Timeout=1000

should be

Connection Timeout=1000

The correct property is outlined in the MSDN documentation for Connection Timeout . Here's the correct way of using a SQL database (taken from the same MSDN documentation):

As discussed via the comments, you're actually connecting to an SQL server, there's a better way here:

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

To query the database for something, you can use:

    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.

If you have an error that multiple queries cannot be executed at the same time, you must enable MARS by appending MultipleActiveResultSets=True; to your connection string.

The keyword to use in the connection string is either ConnectTimeout (no space) or Connection Timeout , as shown here . You have a space in Connect Timeout , and if you set that and are removing the line _cmd.CommandTimeout = 1000 it's probably ignoring the connection string value since it's the incorrect keyword and using the default of 15 seconds.

Try changing your connection string to use Connection Timeout=1000 .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM