怎麼判斷資料庫連線超時
阿新 • • 發佈:2019-01-25
如何判斷資料庫連線超時
環境VS2010+MSSQL
連線資料庫時,如果是遠端資料庫,如192.232.1.53,則要連線很長時間,如何才能設定超時時間。如5秒。
我用Connect Timeout=5,或Command.CommandTimeout = 5;都不起作用。
------解決方案--------------------
多執行緒
環境VS2010+MSSQL
連線資料庫時,如果是遠端資料庫,如192.232.1.53,則要連線很長時間,如何才能設定超時時間。如5秒。
我用Connect Timeout=5,或Command.CommandTimeout = 5;都不起作用。
------解決方案--------------------
多執行緒
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Threading; using System.Data.SqlClient; namespace WindowsApplication3 { public partial class Form1 : Form { bool Return=true; AutoResetEvent sleepSynchro = new AutoResetEvent(false); Exception err = null; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Thread controlThread = new Thread(new ThreadStart(test)); controlThread.Start(); if (!sleepSynchro.WaitOne(3000, false)) { MessageBox.Show("資料庫連線超時.", "錯誤:", MessageBoxButtons.OK, MessageBoxIcon.Error); } else if (!Return) { MessageBox.Show("資料庫連線失敗:" + err.Message, "錯誤:", MessageBoxButtons.OK, MessageBoxIcon.Error); } } void test() { string sqlconn = @"Data Source=3.0.0.0;Initial Catalog=eDocument;Integrated Security=True"; SqlConnection conn = new SqlConnection(sqlconn); try { conn.Open(); Return = true; } catch (Exception e) { Return = false; err = e; } finally { conn.Close(); sleepSynchro.Set(); } } } }
------解決方案--------------------
string str="server={0};database={1};uid={2};pwd={3};Connection Timeout={4} "; str=String.Format(str,Server,DBName,UserId,Passwd,5); SqlConnection Conn=new qlConnection(str); Conn.Open(); //5秒這個時間是指資料庫連線的時間,不包括解析IP地址、尋找機器的時間,而且第一次連線會慢很多, //所以LZ可以把時間設定打點
------解決方案--------------------
讓程式判斷 try...catch 是最好
------解決方案--------------------
public DataTable getDataTable(string strSQL)
{
DataTable dt1 = new DataTable();
using (SqlConnection myConnection = new SqlConnection(connetion))
{
SqlDataAdapter da = new SqlDataAdapter(strSQL, myConnection);
da.SelectCommand.CommandTimeout = 1000;
da.SelectCommand.CommandType = CommandType.Text;
da.Fill(dt1);
da.Dispose();
myConnection.Close();
myConnection.Dispose();
}
return dt1;
}