现在位置首页 / 项目实战 /正文

C# 打开数据库连接超时判断方法

作者: IT小兵 | 2016年12月5日| 热度:℃ | 评论: |参与:

今天系统中,需要调用sql server数据库,一般数据库是常开的,但是今天居然关闭了,程序一直在等待超时。这个是open数据库的超时,不是查询超时。

网上说的Conect TimeOut是无效的。

采用以下方法:

新建类:SqlExtensions

最好单独建磊,不然的话会报错。

using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Comet600.Update2016
{
   public static class SqlExtensions
    {
        public static void QuickOpen(this SqlConnection conn, int timeout)
        {
            // We'll use a Stopwatch here for simplicity. A comparison to a stored DateTime.Now value could also be used
            Stopwatch sw = new Stopwatch();
            bool connectSuccess = false;
            // Try to open the connection, if anything goes wrong, make sure we set connectSuccess = false
            Thread t = new Thread(delegate ()
            {
                try
                {
                    sw.Start();
                    conn.Open();
                    connectSuccess = true;
                }
                catch { }
            });
            // Make sure it's marked as a background thread so it'll get cleaned up automatically
            t.IsBackground = true;
            t.Start();
            // Keep trying to join the thread until we either succeed or the timeout value has been exceeded
            while (timeout > sw.ElapsedMilliseconds)
                if (t.Join(1))
                    break;
            // If we didn't connect successfully, throw an exception
            if (!connectSuccess)
            {
                //  throw new Exception("Timed out while trying to connect.");
            Program.MessageBoxShow("数据库:"+conn.ConnectionString+"未打开,请打开后重新启动!", "数据库未打开", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
    }
}

调用:

public sqlClass(string server, string DbName, string user, string password)
        {
            dbCon = new SqlConnection("server=" + server + ";database=" + DbName + ";uid=" + user + ";pwd=" + password );
            
            try
            {
                //  dbCon.Open();
                SqlExtensions.QuickOpen(dbCon,10000);
            }
            catch (Exception es)
            {
                Program.DisplayMsg("clsSqlite clsDbSqlite", "err:" + es.Message, 0);
            }
        }

这样就能捕获异常了。


点击阅读本文所属分类的更多文章: 项目实战 。和高手一起交流:346717337
友荐云推荐

未注明转发、原文均为本站原创。分享本文请注明 原文链接

给您更多信息和帮助

在这里您可以找到更多:

技术交流群:346717337 Jquery插件交流

投稿:suchso@vip.qq.com

承接:企业网站门户/微网站/微商城/CMS系统/微信公众号运营/业务咨询

echarts教程系列
本月最热文章

微信扫一扫,徜徉悠嘻网,您的休闲乐园

微信公众号:快乐每一天

随机文章
标签

技术交流群:346717337

投稿:suchso@vip.qq.com

专业专注:企业网站门户/微网站/微商城/CMS系统/微信公众号运营/付费问题咨询