2015-01-12 93 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

相關問題