簡體   English   中英

LINQ to SQL,檢查到連接字符串的連接是否有效

[英]LINQ to SQL, check if connection to connection string is valid

我正在使用LINQ to SQL(dbml),並且想在繼續操作之前檢查與連接字符串的連接是否有效。例如,如果連接字符串中的IP不正確(或數據庫關閉) ,程序崩潰,想要對此進行檢查。 我嘗試了這個:

if (DataContext.DatabaseExists())
  MessageBox.Show("Connection Exists");

如果連接有效,則該方法有效,但如果連接無效,則凍結在if語句中。 我還能嘗試或做什么?

<add name="NflDataEntities" connectionString="metadata=res://*/NflData.csdl|res://*/NflData.ssdl|res://*/NflData.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=10.10.***.***;initial catalog=NflData;persist security info=True;user id=*****;password=****;MultipleActiveResultSets=True;App=EntityFramework&quot;"
      providerName="System.Data.EntityClient" />

這是設計使然。 它“凍結”,因為它正在掃描網絡以查找數據庫服務器。 如果找不到,則返回false ,但這可能需要一些時間。

還有其他驗證服務器的選項,例如此處的 您將需要使用SqlConnectionStringBuilder來解析連接字符串並獲取DataSource 有了這些信息,您就可以運行該命令並獲取其響應。 不過,您需要重定向標准輸出,然后解析輸出。 簡而言之,這並不是一個很好的選擇。

問題可能在於,發送給數據庫的請求具有超時,必須超時才能超時。 嘗試將連接字符串中的超時設置為非常短的時間(一兩秒),這可能會加快超時時間。

您可以在顯示系統正在運行的消息時運行async方法,以便在等待Sql響應時UI不會凍結:

ShowMessage("Loading"); // Running on UI thread
        Task.Factory.StartNew(() =>
        {
            try
            {
                return DataContext.DatabaseExists();
            }
            catch (SqlException)
            {
                return false;
            }
        }).ContinueWith(isValid =>
        {
            if (isValid.Result)
                ShowMessage("Success");
            else
                ShowMessage("Failure");
        });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM