none
關於連接SQL延遲的問題~~ RRS feed

  • 問題

  • 請問各位大大~~

    我的程式是用 VS 2008 pro 連接 SQL 2005 Express 資料庫(在本機操作, 並非透過內部網路).

    現在有一個問題, 就是...每次當程式開啟(連接資料庫)使用後, 如果我將程式放著不動幾個小時後再回來使用程式時~~

    就會有將近10~20秒的時間, 程式是不能動的, 也就是程式完全不會反應, 看起來像是在等待重新建立SQL連線, 等到連線建立好後, 才可以繼續使用!!

    我想請問的就是, SQL 資料庫如果一段時間沒去動它, 它會中斷連線嗎? 如果會, 那是不是有什麼地方可以設定成不要中斷連線的呢?

     

    謝謝各位前輩的指導~~~

    • 已移動 璉璉 2009年3月28日 上午 06:05
    2009年1月10日 上午 10:11

解答

  • Connection Timeout =>

    The length of time (in seconds) to wait for a connection to the server before terminating the attempt and generating an error.

     

    所以Connection Timeout應該是指後端連線動作30秒內要通

    不然就會產生Error Message

     

    我指的是加入

    Min Pool Size = 5

    Pooling = true

    二個設定

    代表啟動Connection的Pooling機制

    程式和DB永遠都會有5條連線先建好

    這樣每次執行時就不用再重花時間建立

    只要改connection string就可以了

    Code Snippet

     

    Data Source=myOracleDB;User Id=myUsername;Password=myPassword;Min Pool Size=10;Pooling = true;Connection Timeout=60;

     

     

     

    • 已標示為解答 Lolota Lee 2009年2月19日 上午 08:01
    2009年1月11日 下午 03:07

所有回覆

  • 資料庫連線只要在使用時再開即可,沒有必要一直開著不用,你目前的作法是個壞習慣 ,畢竟又不是持續在撈資料

    2009年1月10日 下午 03:37
    版主
  • 嗯~~ 謝謝小朱大大~~

     

    我是用預存程序叫資料的, 程式如下:

    這樣是要使用時才開的寫法嗎??  (我一直以為是)

     

    Public Sub FindingDataRow()
            Try
                Dim Newcommand As SqlCommand = New SqlCommand("AA", strConn) '建立連線
                Newcommand.CommandType = CommandType.StoredProcedure
                

                Newcommand.Parameters.Add("@AA_Id", SqlDbType.VarChar)
                Newcommand.Parameters("@AA_Id").Direction = ParameterDirection.Input
                Newcommand.Parameters("@AA_Id").Value = UpdateId

                Dim Newadapter As SqlDataAdapter = New SqlDataAdapter(Newcommand) 
                Dim NewTable As New DataTable()


                Newadapter.Fill(NewTable)

      If NewTable IsNot Nothing AndAlso NewTable.Rows.Count > 0 Then
                    '........把資料叫入欄位中
     End If
                Newadapter.Dispose()
                NewTable.Dispose()
                Newcommand.Dispose()
    Catch ex As Exception
                '資料庫連結產生錯誤.
                MsgBox(ex.Message, MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly, MsgTitle)

    End Try

        End Sub

    2009年1月10日 下午 11:54
  • 沒看到你做連線管理的程式。

    如東你沒有呼叫 Connection.Open() 的話,DataAdapter 會自我管理,但如果之前有呼叫而未關的話就要自己關。

     

    2009年1月11日 上午 12:53
    版主
  • 所以第一次程式重啟時也都會要10~20才可以連線?

    會不會是connection pool的問題呢?

    可能是沒有pool存在所以會花比較久的時間?

    connection string中的min connection是否有設定值上去?
    2009年1月11日 上午 03:27
  • To: Bear119大大

     

    程式只有在電腦不用1~2個小時之後,再次使用時才會很慢, 如果程式一直在使用中就不會這樣.

     

    我的connection String 長這樣:

    Ddim strConn As New SqlClient.SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\DBA.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True")

     

    是不是和Connect Timeout=30這一段有關???

    2009年1月11日 上午 09:18
  •  

    To:小朱大大

     

    預存程序AA是一個Select 查詢, 因為不用strConn.Open() 也能正確執行, 所以如果是Select查詢的,我都沒有寫strConn.Open()和strConn.Close(), 只有在Insert, Update和Delete時才寫strConn.Open()和strConn.Close(),

     

    所以小朱大人,您的意思是不是指,Select時,也都要寫上strConn.Open()和strConn.Close(),這樣才不會有問題???

    2009年1月11日 上午 09:25
  • Connection Timeout =>

    The length of time (in seconds) to wait for a connection to the server before terminating the attempt and generating an error.

     

    所以Connection Timeout應該是指後端連線動作30秒內要通

    不然就會產生Error Message

     

    我指的是加入

    Min Pool Size = 5

    Pooling = true

    二個設定

    代表啟動Connection的Pooling機制

    程式和DB永遠都會有5條連線先建好

    這樣每次執行時就不用再重花時間建立

    只要改connection string就可以了

    Code Snippet

     

    Data Source=myOracleDB;User Id=myUsername;Password=myPassword;Min Pool Size=10;Pooling = true;Connection Timeout=60;

     

     

     

    • 已標示為解答 Lolota Lee 2009年2月19日 上午 08:01
    2009年1月11日 下午 03:07
  •  

    To: Bear119大大~~

     

    我試了好幾天,都沒再出現延遲的問題,原本高興的以為問題解決了~~但是~~剛剛又出現了一樣的延遲~~而且我發現,不是只有在Run我的程式時現延遲~~我連開SQL Server Management studio Express,有時侯也會出現延遲的問題~~就是在Connect後,整個Management Studio出現一片空白,大約10~20秒後才正常....這會不會問題不是出在Connection String, 不知學長有沒有Idea,我應該如何解決這個問題?

     

    謝謝~~~

    2009年1月17日 上午 06:33
  • 試一下在SQL Server Management studio Express
    選擇伺服器屬性=>進階=>遠端登入逾時 把值設大一點試試 <預設為20秒>
    2009年3月20日 上午 01:37
  • 你的 client 與 server 若有 IPX 通訊協訂,先移除測看看。或者把連線字串的 Server 改成 ip 測。

    .Net 2.0 / Win2003 R2 以後,若有 IPX 通訊協定,會先用 IPX 搜尋,逾期設定是 2, 4, 8 秒,共 14 秒,在加上指令執行,約是 14.4 秒左右。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年3月20日 上午 03:12
  • 移文至:
    資料存取(ADO.NET與LINQ)


    T.L. Cheng
    2009年3月28日 上午 06:04
  • 謝謝,學習了
    崔偉 如果對我有疑問請發郵件謝謝~~!! cuiweitw@gmail.com
    2009年4月1日 上午 12:45