日期:2014-05-18  浏览次数:21357 次

如何判断数据库连接超时
环境VS2010+MSSQL
连接数据库时,如果是远程数据库,如192.232.1.53,则要连接很长时间,如何才能设置超时时间。如5秒。
我用Connect Timeout=5,或Command.CommandTimeout = 5;都不起作用。

------解决方案--------------------
多线程
C# code

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();
            }

        }
    }
}

------解决方案--------------------
C# code

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;
}