回答
您可以ping服務器:
http://msdn.microsoft.com/en-us/library/system.net.networkinformation.ping.aspx
但這不會告訴你,如果DB是向上。打開一個連接(認證等可能是你唯一的方法)。你爲什麼不斷地以這種方式進行投票?
不知道爲什麼我這樣做,考慮到你很少接受答案,但是這裏就是了。你的問題帶來了很多問題,其中許多意味着什麼。所以忍耐一下....
連接&我
連接可能意味着很多東西。 @Paddy指出,在更低層,PING會告訴您操作系統是否連接到您可以訪問的網絡。但是可以連接一臺計算機,SQL可以停止,脫機或發生故障。 SQL可能處於聯機狀態,但防火牆阻止請求計算機的訪問。請求的計算機可能缺少權限。名單繼續。
我在這裏的一點是:
打開到SQL Server的連接的能力是方法來測試連接。
如果是我,我會把一個小的ADO測試放在一個異步線程。測試會嘗試使用短暫超時打開連接。
解決症狀還是問題?
SQL Server確實被設計成一個高可用性產品,並且通常被設想爲高可用性產品。意思是說,如果你的SQL訪問量非常大,你想測試它(除了一般的錯誤處理程序),我會建議你解決可擴展性問題。即使是最基本的安裝加上大量的厄運,也應該允許95%或更高的正常運行時間。
使用SQL SMO測試
如果我沒有被這一點勸阻你,有一種替代。 SQL SMO(替代SQL DMO)是一系列允許對SQL服務器管理進行編程訪問的對象。
下面的代碼將需要幾個對象的引用:
- Microsoft.SqlServer.ConnectionInfo.dll
- Microsoft.SqlServer.Smo.dll
- Microsoft.SqlServer.Management.Sdk.Sfc 。DLL
- Microsoft.SqlServer.SqlEnum.dll
- Microsoft.SqlServer.SQLWmiManagmenet.dll
- Microsoft.SqlServer.WmiEnum.dll
您可以使用此getting started文章,看看如何設置一個項目。請注意,您需要WINDOWS權限(而不是SQL身份驗證)才能連接到有問題的SQL Server。
現在到代碼:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo.Wmi;
namespace SQL_SMO_Test {
class Program {
public const string SQL_SERVICE_BASENAME = "MSSQL";
public static bool SQLServiceIsRunning (string SQLServerName) {
string[] nameComponents;
string ComputerName;
string InstanceName;
string ServiceName;
ManagedComputer mc;
ServiceCollection serviceList;
//split up SQL Name
nameComponents = SQLServerName.Split('\\');
ComputerName = nameComponents[0];
InstanceName = nameComponents.Length > 1 ? nameComponents[1] : "";
ServiceName = SQL_SERVICE_BASENAME +
((InstanceName.Length>0) ? "$" + InstanceName : "");
//get WMI Computer object
mc = new ManagedComputer(ComputerName);
serviceList = mc.Services;
//find any SQL Services & See if it's our instance
foreach (Service s in serviceList) {
if (s.Type.Equals(ManagedServiceType.SqlServer)) {
Console.WriteLine("Service Found --" + s.Name);
if ((!ServiceName.Contains('$')) || s.Name == ServiceName) {
Console.WriteLine("..Correct Instance found" + s.Name);
if (s.ServiceState.Equals(ServiceState.Running)){
Console.WriteLine("....Service is Running");
return true;
}
}
}
} //end foreach()
Console.WriteLine("service not found, or stopped");
return false; //service not found, or stopped
} //end SQLServiceIsRunning
/* format: servername\instanceIfAny */
public static bool SQLIsRunning(string SQLServerName) {
Server srv;
Console.WriteLine("SERVICE RUNNING (" + SQLServerName + ") ?");
Console.WriteLine("------------------------------");
if (! SQLServiceIsRunning(SQLServerName)) {
return false;
}
Console.WriteLine("------------------------------");
srv = new Server(SQLServerName);
try {
Console.WriteLine("Status: " + srv.Status.ToString());
return true;
} catch (Exception ex) {
Console.WriteLine("Exception: " + ex.ToString());
}
return false;
} //end SQLIsRunning()
static void Main(string[] args) {
bool result = SQLIsRunning("MST-SQL01.mst.com");
Console.WriteLine("-----------");
Console.WriteLine("Press any key to close...");
Console.ReadKey();
} //end main()
}
}
這似乎很有用,但不是很重的操作?對不起,我對SMO沒有更多的想法。所以不能多說。 – 2012-03-01 07:00:24
「不是很重」 - 取決於你的觀點。這是和過程中,可能網絡調用,像所有的數據庫連接。所以你會以毫秒爲單位來測量時間,而不是納秒。但它比等待連接超時更快。但是,我支持我的說法 - 連接是測試數據庫可用性的方法。把你的連接測試放在一個異步線程上,這樣你就不會在乎等待時間。 – EBarr 2012-03-01 12:31:26
- 1. SQL - 測試dB
- 2. 與db連接的Java測試類
- 3. VBA測試連接到SQL Server
- 4. 沒有sql連接的Python測試
- 5. 無法通過Android測試連接到Sql Server測試
- 6. Winsock連接測試
- 7. 測試Memcached連接
- 8. PDO連接測試
- 9. 添加DB連接
- 10. Azure AWS Db連接
- 11. 如何中斷與db的連接以用於測試目的?
- 12. 如何在Spring Boot中模擬db連接以進行測試?
- 13. 運行流星測試時,如何連接到mongo db?
- 14. 如何測試與Db的連接是否成功建立?
- 15. PHP和db連接
- 16. 測試火力點連接連接
- 17. python db連接
- 18. DB連接
- 19. 在DB連接
- 20. MySQL db連接
- 21. 暗戰使用LINQ DB連接到SQL
- 22. 與SQL Anywhere 10 * .db文件的連接
- 23. 使用SQLConnection連接到SQL CE db
- 24. 嘗試使用odbc連接創建到mySQL db的連接
- 25. C#.net異常當試圖通過測試單元參考db連接
- 26. 連接Oracle DB用的SQLDeveloper
- 27. 如何測試jpa連接?
- 28. Rspec測試SMTP連接
- 29. ANDROID - 測試wifi連接
- 30. 測試Pyodbc連接對象
我想阻止行動應用程序正在執行,如果數據庫不可用,這就是爲什麼。所以如果數據庫沒有連接,應用程序將被鎖定。 – 2012-02-29 14:19:34
爲什麼不直接爲數據庫關閉時的情況提供一些錯誤處理(我希望這種情況應該不常見),而不是使用資源不斷ping這臺服務器來檢查? – Paddy 2012-02-29 15:52:48