C#测试数据库连接

时间:2014-04-19 19:04:12

标签: c# database error-handling odp.net

使用C#和Oracle.ManagedDataAccess.Client测试数据库连接的最佳方法是什么?

我应该在每个conn.Open()之前测试一下,看看服务器是否可访问,或者在首次运行时进行一次测试吗?

我的主要问题是:如果数据库服务器处于脱机状态,我在网页上遇到异常,这不是与用户交互的最佳方式。

如果无法建立连接,如何显示错误页面?

示例数据访问层方法:

public bool IsEmailAddressExisting(string emailAddr)
{
    using (OracleConnection conn = new OracleConnection(BasicConnection.connectionStringOracle))
    using (OracleCommand command = conn.CreateCommand())
    {
        conn.Open();
        command.CommandText = "SELECT id FROM Users WHERE email=:emailAddr";
        command.Parameters.Add(":emailAddr", OracleDbType.Varchar2).Value = emailAddr;

        var result = command.ExecuteScalar();

        return (result != null);
    }
}

注意:我不想把try-catch放在每个方法的连接上。

我发现this回答非常有用。

3 个答案:

答案 0 :(得分:3)

  

使用C#和Oracle.ManagedDataAccess.Client测试数据库连接的最佳方法是什么?

根本不测试。除非你真的需要这个。您描述的情况似乎不需要连接测试。

  

我应该在每个conn.Open()之前进行测试,以查看服务器是否可访问或在首次运行时进行一次测试吗?

不,这将以一个充满try-catch块的代码结束。您可以在某些特定情况下使用此功能,但不是一般情况下,不适用于每种情况。

  

如果无法建立连接,如何显示错误页面?

最后,这就是你真正需要的。例外并不坏,它就是它的本质。数据库不可用你还能做什么?那么,从应用程序的角度来看,您应该记录所有未处理的异常和错误。但您无需向用户报告确切的问题。您只能显示用户友好的常规错误消息。

每种网络技术都有这个。你可以这样说:

  

不幸的是,此功能目前尚不可用。已向相关人员发送了一封电子邮件。我们正在调查这个问题。请稍后再试。

答案 1 :(得分:1)

  

注意:我不想把try-catch放在每个方法的连接上。

如果您已经在很多方法中获得了数据库连接代码,那么 你的问题,而不是数据库现在正在脱机(尽管你也应该得到它)固定)。

无论如何,您应该在应用程序的高级别点使用try..catch,或者使用您正在使用的Web或应用程序框架的正确错误处理,这样您就可以显示一个很好的"出了问题" -screen而不是将异常转储给最终用户。

您不希望在执行查询之前在线添加"数据库,因为在这两个调用之间数据库可以脱机,或者您可以使用无效输入进行查询无论如何都要抛出异常。

答案 2 :(得分:0)

默认情况下,OracleConnection是一个连接池。如果你将连接字符串属性validateconnection设置为true,它将为你完成这项工作,虽然它会增加往返。

相关问题