none
尋找SQL資料庫的問題 RRS feed

  • 問題

  • 大家好 我再寫asp.net c#遇到了一個瓶頸
    使用者輸入資料庫名稱 放到DBTextBox.Text裡
    string connectionString = "Server=.;User ID=sa;Password=1234;" + @"AttachDbFilename=C:\DB" + DBTextBox.Text + ".mdf";
     try
     {
        SqlConnection connection = new SqlConnection(connectionString);
        connection.Open();             
        connection.Close();
        connection.Dispose()
     }
     catch (Exception exception)
     {               
       Response.Write(exception.Message);
     }

    如果輸入不存在的資料庫 則會在 connection.Open();發生錯誤而進入catch (Exception exception)
    請問有什麼方法能判斷連線不存在呢?

    2011年5月12日 上午 06:42

解答

  •  

    try

    {

        SqlConnection connection = new SqlConnection(connectionString);

        String connectionstate = connection.State.ToString().ToUpper();

        if (connectionstate != "OPEN") //判斷連線是否尚未開啟

        {

            connection.Open();

        }

     

        //TODO...

        /*

         * 照理說程式寫固定讀取固定路徑下的資料庫檔案,就不應該發生找不到資料庫檔案

         * 就算真的發生 Exception,做例外錯誤處理時,也只是 "警示" 資料庫無法成功連接

         */

     

        if (connectionstate == "OPEN") //判斷連線是否已開啟

        {

            connection.Close();

            connection.Dispose();

        }

    }

    catch (Exception exception)

    {

        Response.Write(exception.Message);

    }

    • 已標示為解答 阿呆呆 2011年6月2日 上午 06:16
    2011年5月17日 下午 06:12

所有回覆

  • 自問自答
    突然想到可以用System.IO.File.Exists()看檔案是否存在再去連
    有更好地方法 也請回答哦

    2011年5月12日 上午 06:50
  • System.IO.File.Exists()??

    判斷連線不存在還包含連線字串,權限..議題.

    檔案存在,權限不對,Connection 也不存在.

    2011年5月12日 上午 07:02
  • To: 阿呆呆

    其實你的問題內容就是答案, 用 SqlConnection.Open方法去試著開一次就知道這個連線會不會出問題.

    你的Code比較需要修正的一點是使用比較精確的例外處理, 在 MSDN文件庫中 [SqlConnection.Open 方法]有個 例外狀況的部份, 說明了SqlConnection.Open方法最主要會產生兩種例外

    (1) InvalidOperationException  :在沒有指定資料來源或伺服器的情況下無法開啟連接。連接已經開啟。 (所以你在Open前必須先判斷SqlConnection.State 屬性 來避免已被開啟發生的例外)

    (2) SqlException :當開啟連接時發生的連接層級錯誤。 如果 Number 屬性包含 18487 或 18488 值,這表示指定的密碼已逾期或必須重設

    大致上是這樣.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2011年5月12日 下午 04:26
    版主
  • 程式進入到catch段落就表示連線不成功

    2011年5月13日 下午 02:41
  •  

    try

    {

        SqlConnection connection = new SqlConnection(connectionString);

        String connectionstate = connection.State.ToString().ToUpper();

        if (connectionstate != "OPEN") //判斷連線是否尚未開啟

        {

            connection.Open();

        }

     

        //TODO...

        /*

         * 照理說程式寫固定讀取固定路徑下的資料庫檔案,就不應該發生找不到資料庫檔案

         * 就算真的發生 Exception,做例外錯誤處理時,也只是 "警示" 資料庫無法成功連接

         */

     

        if (connectionstate == "OPEN") //判斷連線是否已開啟

        {

            connection.Close();

            connection.Dispose();

        }

    }

    catch (Exception exception)

    {

        Response.Write(exception.Message);

    }

    • 已標示為解答 阿呆呆 2011年6月2日 上午 06:16
    2011年5月17日 下午 06:12