Tuesday, March 24, 2015

Sharing Everything From My Experience And Knowlegde

Sharing Everything From My Experience And Knowlegde


Set Unlimited ConnectionTimeOut And CommandTimeOut VBNET

Posted: 23 Mar 2015 09:18 PM PDT

Apa itu ConnectionTimeOut ? adalah batas waktu yang di setting untuk sebuah variable koneksi baik itu SqlClient, OLEDB dan ODBC dalam melakukan proses koneksi ke server. Secara default ConnectionTimeOut=15 detik. Jadi jika misalnya program kita sedang koneksi di form_login misalnya, dan ternyata server-nya ngehang atau bussy(sibuk) atau jaringannya putus dan lain lain selama 20 detik maka pasti akan muncul error : TIME OUT EXPIRED
Karena ConnectionTimeOut yang kita seting = 15 detik sedangkan server/jaringan bermasalah selama 20 detik. Jika kita seting ConnectionTimeOut= 30 detik maka Error tersebut tidak akan muncul, karena begitu waktu menginjak ke detik 21, maka form_login tersebut akan berhasil koneksi ke server.
Apa itu CommandTimeOut ? adalah batas waktu yang di setting untuk sebuah variable command baik itu SqlClient, OLEDB dan ODBC dalam melakukan proses execute (CRUD) ke server. Secara default ConnectionTimeOut=30 detik. Jadi jika misalnya program kita sedang tarik report (generate report) misalnya, dan ternyata server-nya ngehang atau bussy(sibuk) atau jaringannya putus dan lain lain sehingga menyebabkan kerja Database Server lama (misal 60 detik baru data report akan keluar), maka akan muncul error :
karena CommandTimeOut yang kita seting = 30 detik sedangkan server/jaringan memberi feedback ke client 60 detik.
Jika kita seting CommandTimeOut= 120 detik (2 menit) maka Error tersebut tidak akan muncul, karena begitu waktu menginjak ke detik 60, maka data report tersebut akan keluar.

Jangan salah pengertian :
ConnectionTimeOut = 15 detik, bukan berarti koneksi baru akan suskes di detik 15, 15 detik hanyalah waktu tunggu. Ya jika koneksi lancar 1 detik pun bisa langsung koneksi.
CommandTimeOut = 30 detik, bukan berarti Sql Query baru akan suskes di detik 30, 30 detik hanyalah waktu tunggu. Ya jika Sql Query tersebut lancar di proses oleh servernya, 1 detik pun bisa langsung muncul result nya.

Bagaimana cara mengubah ConnectionTimeOut atau CommandTimeOut menjadi unlimited ?
ya kita set saja nilainya menjadi 0 (nol) = artinya unlimited (tanpa ada batas waktu tunggu)

Dari pengalaman saya :
1. ConnectionTimeOut idealnya 30 detik saja (1.2 menit), agar jika di detik 31 belum koneksi maka akan muncul error kenapa ga konek, jadi kita tahu masalahnya apa. Jika kita set unlimited maka justru bahaya, bisa jadi seharin itu form_login akan ngehang terus tanpa ada respond apa apa (try connection) padahal servernya mati (misalnya).

2. CommandTimeOut biasanya saya set Unlimited saja, karena CRUD atau Sql Query saat tarik report misalnya kita tidak bisa prediksi berapa lama Sql Query itu akan selesai. Di kantor saya pun jika menarik report bulanan dengan jumlah transaksi jutaan row dan kompleksitas Query yang tinggi bisa memakan waktu 1-2 jam.

Dibawah ini bagaiman cara kita menerapkan ConnectionTimeOut dan CommandTimeOut di Coding VBNET

'Contoh Koneksi

Using con As New SqlConnection("data source=.;user id=sa;password=;initial catalog=djiesoft;CONNECTION TIMEOUT=30")
  con.Open()
End Using

'Contoh Query
Dim tbl As New DataTable
Using con As New SqlConnection("data source=.;user id=sa;password=;initial catalog=neobdg_c;CONNECTION TIMEOUT=30")
  con.Open()
  Using cmd As New SqlCommand("select * from produk", con) With {.CommandTimeout = 0}
      Using adp As New SqlDataAdapter(cmd)
         adp.Fill(tbl)
      End Using
  End Using
End Using

Jika kamu jarang/belum biasa menggunakan "USING", ini dia cara Clasic :



Dim con As New SqlClient.SqlConnection
With con
  .ConnectionString = "data source=.;user id=sa;password=;initial catalog=djiesoft;CONNECTION TIMEOUT=30"
  .Open()
End With

Dim cmd As New SqlCommand("select * from produk", con)
cmd.CommandTimeout = 0

'atau Dim cmd As New SqlCommand("select * from produk", con) With {.CommandTimeout = 0}

Dim adp As New SqlDataAdapter(cmd)
adp.Fill(tbl)


Tags:
Timeout error in VB.NET while running a sql script , Error: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding, VB.NET - SQL Command Timeout Error on updating a record, [SOLVED] : time out expired, mengatasi error query timeout

No comments:

Post a Comment