1. 程式人生 > >怎麼判斷資料庫連線超時

怎麼判斷資料庫連線超時

如何判斷資料庫連線超時
環境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;
}