在 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打开数据库?

使用C#循环反复多次连接SQL数据库,出现“内部连接致命错误”的问题,怎么解决?

.NET C#事务处理

为啥我的代码在“con.Open()”之后停止?

c# SQL登陆问题

无法从表中显示最大工资(测试)