日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
      軟件
      軟件
      文章
      搜索

      首頁西西教程數(shù)據(jù)庫教程 → 數(shù)據(jù)庫連接一定要關(guān)閉嗎?也有可以不關(guān)閉的!

      數(shù)據(jù)庫連接一定要關(guān)閉嗎?也有可以不關(guān)閉的!

      相關(guān)軟件相關(guān)文章發(fā)表評論 來源:西西整理時(shí)間:2011/8/9 9:20:48字體大。A-A+

      作者:西西點(diǎn)擊:93次評論:16次標(biāo)簽: 數(shù)據(jù)庫

      • 類型:數(shù)據(jù)庫類大。5.9M語言:中文 評分:10.0
      • 標(biāo)簽:
      立即下載

      首先要說明的是連接數(shù)是有限制的:

      代碼如下:

      for (int i = 0; i < 10000; i++)
      {
          SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;
                      AttachDbFilename=""E:\DB\NORTHWND.mdf"";
                      Integrated Security=True;Connect Timeout=30;User Instance=True");
      
          conn.Open();
          Console.WriteLine("打開了{(lán)0}個(gè)連接", i);
      }

      運(yùn)行結(jié)果如下:

      過一會(huì)就會(huì)提示打開連接超時(shí)了:

      可以看到數(shù)據(jù)庫連接時(shí)有限制的,如果連接不關(guān)閉,而且使用的人比較多,那么系統(tǒng)很快就down掉了。

      但是有時(shí)候由于某些原因應(yīng)用程序可能只是幾個(gè)人使用,所以就有人設(shè)計(jì)了:

      在應(yīng)用程序啟動(dòng)的時(shí)候打開數(shù)據(jù)庫連接,在應(yīng)用程序關(guān)閉的時(shí)候關(guān)閉數(shù)據(jù)庫連接

      那么使用這種方式有什么問題呢?

      首先假設(shè)有一張表Nums,表定義如下:

      Main代碼如下:

      SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;
                          AttachDbFilename=""E:\DB\NORTHWND.mdf"";
                          Integrated Security=True;Connect Timeout=30;User Instance=True");
      conn.Open();
      Parallel.For(1, 9999, (id) =>
      {
          ExecuteCommand(conn, id);
      });

      就是從1到9999開始執(zhí)行ExecuteCommand

       

      ExecuteCommand代碼如下:

      private static void ExecuteCommand(SqlConnection conn, int id)
      {
          Console.WriteLine("正在執(zhí)行." + id);
      
          Thread.Sleep(100);
      
          SqlCommand cmd = new SqlCommand(       string.Format("Insert into Nums values('{0}') ", id), conn);
      
          cmd.ExecuteNonQuery();
      }

      運(yùn)行:

      可以看到ExecuteNonQuery方法拋出了異常,原因是連接處于關(guān)閉狀態(tài)。

       

      可是我們的連接一直都是open著的啊,并沒有調(diào)用close,dispose之類的方法啊。

      于是在ExecuteCommand前面增加判斷條件:

      if (conn.State != System.Data.ConnectionState.Open)
          conn.Open();

      再次運(yùn)行:

      可以看到還是會(huì)出現(xiàn)連接已關(guān)閉的問題。你知道什么原因嗎?

      這里是由于多線程環(huán)境引起的。所以需要加鎖。

      private static object syncObj = new object();private static void ExecuteCommand(SqlConnection conn, int id){    lock (syncObj)    {        if (conn.State != System.Data.ConnectionState.Open)            conn.Open();        Console.WriteLine("正在執(zhí)行.." + id);        Thread.Sleep(100);        SqlCommand cmd = new SqlCommand(           string.Format("Insert into Nums values('{0}') ", id), conn);        cmd.ExecuteNonQuery();    }}

      再次運(yùn)行:可以發(fā)現(xiàn)基本沒問題了.

      修改Parallel.For的最大值上限,要測試下是否可以長期執(zhí)行了。

      Parallel.For(1, Int32.MaxValue, (id) =>            {                ExecuteCommand(conn, id);            });

       

      一天測試下來,沒出現(xiàn)任何問題。

      結(jié)論對于某些只有幾個(gè)人使用的應(yīng)用程序,可以不關(guān)閉數(shù)據(jù)庫連接,但是在寫代碼的時(shí)候最好要加上連接是否打開的判斷。

        數(shù)據(jù)庫管理
        (97)數(shù)據(jù)庫管理
        數(shù)據(jù)庫管理軟件是一種負(fù)責(zé)數(shù)據(jù)庫的定義、建立、操作、管理和維護(hù)的軟件系統(tǒng)。它對數(shù)據(jù)庫進(jìn)行統(tǒng)一的管理和控制,以保證數(shù)據(jù)庫的安全性和完整性。用戶通過DBMS訪問數(shù)據(jù)庫中的數(shù)據(jù),數(shù)據(jù)庫管理員也通過dbms進(jìn)行數(shù)據(jù)庫的維護(hù)工作。數(shù)據(jù)庫管理系統(tǒng)的主要職能有數(shù)據(jù)庫的定義和建立、數(shù)據(jù)庫的操作、數(shù)據(jù)庫的控制、數(shù)據(jù)庫的維護(hù)、故障恢復(fù)和數(shù)據(jù)通信。這里西西給大家收集整理了一些實(shí)用的數(shù)據(jù)庫管理軟件下載,推薦有需要的用戶來西西下載使...更多>>
        • MySQL服務(wù)器管理套件(MyDB Studio)

          03-25 / 5.8M

          推薦理由:MyDB Studio包含了用于MySQL服務(wù)器管理的完整工具集。它可用于創(chuàng)建/編輯/放棄數(shù)據(jù)庫對象,數(shù)據(jù)庫同步,以及
        • dbforge studio for mysqlV6.3.330

          08-14 / 18.7M

          推薦理由:dbforge studio for mysql是一款強(qiáng)大的專門用來自動(dòng)化和簡單化MySQL的工作輔助工具,軟件提供了一種簡單的方
        • Sequel Pro for Macv1.0.2

          08-18 / 6.1M

          推薦理由:Sequel Pro for Mac是一款Mac平臺(tái)的MySQL管理工具,sequel pro for mac是MySQL數(shù)據(jù)庫管理應(yīng)用程序,適用于M
        • MySQL數(shù)據(jù)庫設(shè)計(jì)建模(MySQL Workbe

          10-15 / 36.4M

          推薦理由:MySQLWorkbench是一款專為MySQL設(shè)計(jì)的ER/數(shù)據(jù)庫建模工具。它是著名的數(shù)據(jù)庫設(shè)計(jì)工具DBDesigner4的繼任者。你
        • 開源ETL工具(Kettle)V5.1.0 免費(fèi)Sp

          09-29 / 579.6M

          推薦理由:Pentaho Data Integration (Kettle)是Pentaho生態(tài)系統(tǒng)中默認(rèn)的ETL工具。通過非常直觀的圖形化編輯器(Spoon
        • 高效開源數(shù)據(jù)庫(mongodb)V3.4.10 官

          10-29 / 145.8M

          推薦理由:MongoDB是一個(gè)介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫的。

        相關(guān)評論

        閱讀本文后您有什么感想? 已有人給出評價(jià)!

        • 8 喜歡喜歡
        • 3 頂
        • 1 難過難過
        • 5 囧
        • 3 圍觀圍觀
        • 2 無聊無聊

        熱門評論

        最新評論

        發(fā)表評論 查看所有評論(16)

        昵稱:
        表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
        字?jǐn)?shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)