在 con.Open() 之前测试数据库连接是不是正常
Posted
技术标签:
【中文标题】在 con.Open() 之前测试数据库连接是不是正常【英文标题】:Test Database Connection is OK before con.Open()在 con.Open() 之前测试数据库连接是否正常 【发布时间】:2012-10-26 03:44:56 【问题描述】:我为我的应用创建了一个通用的数据库处理程序类。
我使用的是本地数据库,所以这里使用SqlCeConnection
类。
我想做的是测试连接字符串是否有效,所以在我执行connection.Open();
之前更新用户的连接状态
让我们说
SqlCeConnection conn = new SqlCeConnection(connectionString);
//so far we have only created the connection, but not tried to open it
//Would be nice to update the UI to say that conn is OK
conn.testConnection();
conn.Open();
我正在考虑编写一个方法来尝试open
然后close
连接,我的想法是对的还是有更好的方法。
【问题讨论】:
就像使用电子邮件地址一样,真正知道它有效的唯一方法就是尝试使用它。在这种情况下,即打开一个测试连接。打开(和关闭)连接将花费很少的时间。所以..就写吧。我也会使用finally
,并在TestConnection
方法中将其全部抽象出来:if (!TestConnection(..)) ShowError(..)
【参考方案1】:
测试连接性会增加额外的开销。为什么不直接打开连接并将代码放入Try-Catch
try
conn.Open();
catch(SqlCeException ex)
// output the error to see what's going on
MessageBox.Show(ex.Message);
【讨论】:
是本地数据库,所以服务器是localhost,是不是还是catch比较好?【参考方案2】:您可以将DbConnectionStringBuilder
与属性ConnectionString
一起使用,如果connection string is not correct format 将抛出异常:
public static class Extension
public static void TestConnection(this DbConnection connection)
var builder = new DbConnectionStringBuilder
ConnectionString = connection.ConnectionString
;
通过这种方式,您不需要真正打开与数据库的连接。
【讨论】:
我喜欢这个想法,我试过了,但现在编译器给了我一个错误->错误 1 扩展方法必须在非泛型静态类中定义 C:\.....\WindowsFormsApplication\类\DatabaseConnection.cs 11 18 @IEnumerable:将此代码放在静态类扩展上,编辑我的答案以上是关于在 con.Open() 之前测试数据库连接是不是正常的主要内容,如果未能解决你的问题,请参考以下文章
C# 如何判断与sql数据库是不是能够正常连接,再用open打开数据库?