使用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回答非常有用。
答案 0 :(得分:3)
使用C#和Oracle.ManagedDataAccess.Client测试数据库连接的最佳方法是什么?
根本不测试。除非你真的需要这个。您描述的情况似乎不需要连接测试。
我应该在每个conn.Open()之前进行测试,以查看服务器是否可访问或在首次运行时进行一次测试吗?
不,这将以一个充满try-catch
块的代码结束。您可以在某些特定情况下使用此功能,但不是一般情况下,不适用于每种情况。
如果无法建立连接,如何显示错误页面?
最后,这就是你真正需要的。例外并不坏,它就是它的本质。数据库不可用你还能做什么?那么,从应用程序的角度来看,您应该记录所有未处理的异常和错误。但您无需向用户报告确切的问题。您只能显示用户友好的常规错误消息。
每种网络技术都有这个。你可以这样说:
不幸的是,此功能目前尚不可用。已向相关人员发送了一封电子邮件。我们正在调查这个问题。请稍后再试。
答案 1 :(得分:1)
注意:我不想把try-catch放在每个方法的连接上。
如果您已经在很多方法中获得了数据库连接代码,那么 你的问题,而不是数据库现在正在脱机(尽管你也应该得到它)固定)。
无论如何,您应该在应用程序的高级别点使用try..catch
,或者使用您正在使用的Web或应用程序框架的正确错误处理,这样您就可以显示一个很好的"出了问题" -screen而不是将异常转储给最终用户。
您不希望在执行查询之前在线添加"数据库,因为在这两个调用之间数据库可以脱机,或者您可以使用无效输入进行查询无论如何都要抛出异常。
答案 2 :(得分:0)
默认情况下,OracleConnection是一个连接池。如果你将连接字符串属性validateconnection设置为true,它将为你完成这项工作,虽然它会增加往返。