2015-01-12 61 views
0

在我的独立的Windows应用程序,我有一个连接字符串:为什么我的SQL连接计时?

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" 

任何人都可以解释为什么我现在有程序超时而不是添加连接超时之前?

下面是如何创建的连接:虽然我明白,

 _cmd.CommandTimeout = 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 

这似乎不是发生在我删除的连接超时,并添加一个命令超时,但是一个命令&连接超时是两件不同的事情,对我来说没有任何意义,增加一个连接超时延长默认会导致这个问题。

+4

你有不正确的属性,它应该是'Connection Timeout' - http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectiontimeout%28v=vs.110%29 .aspx – Kami

+2

为了避免这样的问题,我总是建议使用不允许构建无效连接字符串的SqlConnectionStringBuilder。 –

+0

我正在使用这个作为我的参考:https://www.connectionstrings.com/all-sql-server-connection-string-keywords/ 感谢你们的帮助。 – user

回答

1

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

Connect Timeout=1000 

应该

Connection Timeout=1000 

正确的属性在MSDN documentation概述了Connection Timeout。 下面是一个使用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. 

如果您有多个查询不能在同一时间执行的错误,您必须启用MARS通过将MultipleActiveResultSets=True;附加到连接字符串。

+0

将连接字符串存储在一个文件中比仅仅将它放在类的顶部更高效? – user

+0

@user可能不会,因为您必须首先读取使用更多内存的文件,并且会增加进入数据库所需的时间。 – cybermonkey

+0

如果您需要更改连接字符串,该怎么办?你更换程序而不是编辑配置文件?微型优化值得灵活性失去? – Steve

0

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

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

相关问题