日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

測試ConnectionString是否能連接上數(shù)據(jù)庫服務(wù)器

 googo 2011-07-14

測試ConnectionString是否能連接上數(shù)據(jù)庫服務(wù)器

比如你要連接一個(gè)Sql Server服務(wù)器,你有一個(gè)connection string, 但是不知道是否是正確的,你可以這樣:

 

var connection = new SqlConnection(connectionString);

connection.Open();

connection.Close();

 

如果整個(gè)過程中沒有異常拋出,則說明connectionString是指向一個(gè)Sql Server的服務(wù)器。但是,如果connectionString里邊的Data Source(或者Server)的值是錯(cuò)的,就要等很久——大約30秒——才能從connection.Open()這一句拋出異常。有沒有辦法讓這個(gè) 過程快一點(diǎn)呢?

 

你可以試著在connectionString里添加上: "Connection Timeout=3",這指示超時(shí)時(shí)間為3秒。但是實(shí)際上效果還是一樣的,異常仍然要在30秒之后才會拋出。

 

你也可以試著用另一個(gè)線程去連接服務(wù)器,主線程在若干秒后調(diào)用該線程的 Abort()方法,但是,實(shí)驗(yàn)效果是行不通,因?yàn)槟莻€(gè)線程在connection.Open()里根本出不來,無法被Abort掉。

 

最后,我的解決方法還是采用后臺線程,只不過如果到期尚未成功,那就當(dāng)做失敗,然后把它扔到一邊去,不再理它了:

 

            //采用后臺線程來連接數(shù)據(jù)庫,以便在服務(wù)器輸入錯(cuò)誤的情況下,不用等待很長的時(shí)間才能得到一個(gè)錯(cuò)誤提示
            string error = null;
            var success = false;

            // ReSharper disable AccessToModifiedClosure
            // ReSharper disable UseObjectOrCollectionInitializer
            var thread = new Thread(() =>
                                        {
                                            try
                                            {
                                                connection.Open();
                                                connection.Close();

                                                success = true;
                                            }
                                            catch (SqlException ex)
                                            {
                                                error = ex.Message;
                                            }
                                            finally
                                            {
                                                if (connection.State == ConnectionState.Open)
                                                    connection.Close();
                                            }
                                        });
            // ReSharper restore AccessToModifiedClosure
            // ReSharper restore UseObjectOrCollectionInitializer
            thread.IsBackground = true;
            var sw = Stopwatch.StartNew();
            thread.Start();

            var timeout = TimeSpan.FromSeconds(3);
            while (sw.Elapsed < timeout)
                thread.Join(TimeSpan.FromMilliseconds(200));
            sw.Stop();

            if (!success)
            {
                throw new Exception(error ?? "連接數(shù)據(jù)庫超時(shí),請檢查輸入的服務(wù)器是否正確。");
            }

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多