在我的独立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
虽然我明白命令&连接超时是两回事,对我来说添加连接超时以扩展默认值会导致此问题没有意义。
答案 0 :(得分:1)
您使用的连接超时属性不正确:
Connect Timeout=1000
应该是
Connection Timeout=1000
Connection Timeout
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
中列出了正确的属性。
以下是使用SQL数据库的正确方法(取自相同的MSDN文档):
正如通过评论所讨论的那样,您实际上将连接到SQL服务器,这里有更好的方法:
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.
要查询数据库中的某些内容,您可以使用:
MARS
如果您错误地无法同时执行多个查询,则必须通过将MultipleActiveResultSets=True;
附加到您的连接字符串来启用{{1}}。
答案 1 :(得分:0)
要在连接字符串中使用的关键字是ConnectTimeout
(无空格)或Connection Timeout
,如图here所示。您在Connect Timeout
中有一个空格,如果您设置并删除了行_cmd.CommandTimeout = 1000
,它可能会忽略连接字符串值,因为它是不正确的关键字并使用默认值15秒。
尝试更改连接字符串以使用Connection Timeout=1000
。