为什么我的 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 Timeout
的 MSDN 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
。
在我的独立 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 Timeout
的 MSDN 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
。