测试sql连接而不抛出exception

要测试我是否可以连接到我的数据库,我执行以下代码:

using (SqlConnection connection = new SqlConnection(myConnectionString)) { try { connection.Open(); canConnect = true; } catch (SqlException) { } } 

除非在连接失败时抛出exception,否则此方法有效。 有没有其他方法来测试不抛出exception的Sql连接?

编辑:为了增加精度,我问是否有一个简单的方法可以做到这一点,而无需打开连接并捕获可能发生的exception

尝试打开连接时,如果无法打开连接,则无法避免exception。 它可以隐藏在某个地方的某个function中,但无论如何,你都会得到exception。

它的设计是这样的,因为通常您希望能够连接到数据库。 连接失败是例外

话虽这么说,您可以通过检查State属性随时测试当前的连接状态。

如果它抛出一个exception而你在catch块中处理它,你就已经知道连接失败了。 我想你回答了自己的问题。

像这样写一个扩展名:

 public static class Extension{ public static bool CanOpen(this SqlConnection connection){ try{ if(connection == null){ return false; } connection.Open(); var canOpen = connection.State == ConnectionState.Open; connection.close(); return canOpen; } catch{ return false; } } 

然后你可以像以下一样消费它:

  using(var connection = new SqlConnection(myConnectionString)){ if(connection.CanOpen()){ // NOTE: The connection is not open at this point... // You can either open it here or not close it in the extension method... // I prefer opening the connection explicitly here... } } 

HTH。

我认为这里真正的答案是ping。

 string data = "ismyserverpingable"; byte[] buffer = Encoding.ASCII.GetBytes (data); int timeout = 120; PingReply reply = pingSender.Send ("google.com", timeout, buffer, options); if (reply.Status == IPStatus.Success) { } 

除非您明确检查是否可以进行SQL连接9/10,否则您应该知道某些东西是否为sql server。 这样可以节省您对exception的令人讨厌的内存使用情况,这是我打赌你真正想要的。

在尝试打开连接字符串之前,您始终可以使用ConnectionStringBuilder类并检查连接字符串所需的每个部分是否存在。

如果连接字符串是正确的,但是您连接的数据库服务器已关闭,那么您仍然会获得一个除外。 如果您要连接的端点可能处于脱机状态,则检查字符串的质量是没有意义的。

连接数据库时无法避免exception,但有一些function可以很好地处理这个问题。 我正在使用此函数,如果存在连接则返回true。

  public static bool IsSQLConnectionAvailable() { SqlConnection _objConn = new SqlConnection(); try { _objConn.ConnectionString = ConfigurationManager.ConnectionStrings["DefaultSQLConnectionString"].ConnectionString; _objConn.Open(); } catch { return false; } finally { if (_objConn.State == ConnectionState.Open) _objConn.Close(); } return true; }