[英]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="data source=10.10.***.***;initial catalog=NflData;persist security info=True;user id=*****;password=****;MultipleActiveResultSets=True;App=EntityFramework""
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.