更新:不是直接的答案,而是更新到最新的托管Oracle.ManagedDataAccess程序集似乎可以解决此问题。执行更新后,没有其他异常。
但是我仍然不知道为什么catch子句似乎无法捕获异常...
也许我在这里出错了,但是看起来好像没有发生OracleException。我不时在从数据库表中读取文章数据的小型应用程序的日志中收到以下消息。没有有关发生问题的信息。
2018-09-04T14:52:41.05+02:00 TRACE - | / -> ENTER Program:currentAppDomain_UnhandledException
2018-09-04T14:52:41.06+02:00 ERROR - | | unhandled exception occurred Oracle.DataAccess.Client.OracleException bei Oracle.DataAccess.Client.OracleException.GetOpoErr(IntPtr opsErrCtx, Int32 arrayBindIndex, String dataSrc, String procedure)
bei Oracle.DataAccess.Client.OracleException.GetOpoErrCtx(IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, IntPtr opsConCtx, String dataSrc, String procedure)
bei Oracle.DataAccess.Client.OracleException..ctor(IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, IntPtr opsConCtx, String dataSrc, String procedure)
bei Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)
bei Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, Object src, Boolean bCheck)
bei Oracle.DataAccess.Client.OracleDataReader.Read()
bei #####.Database.DBAccess.LoadModuleParameters[T](String artikelsn, String modulsn, String serial, IHLogger logger) in d:\dev\#####\DBAccess.cs:Zeile 1949.
2018-09-04T14:52:41.87+02:00 TRACE - | \ <- LEAVE (00:00:00.82) Program:currentAppDomain_UnhandledException
从数据库表中读取的代码如下所示。
var conn = DBAccess.connect(ADDDataToDB.loginData);
try
{
using (var command = conn.CreateCommand())
{
command.CommandText = "SELECT * FROM ...";
command.Parameters.Add(new OracleParameter(":a...
command.Parameters.Add(new OracleParameter(":m...
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
// do something with retrieved data
}
}
}
}
catch (Exception ex)
{
if (logger != null)
...
为什么异常不会被捕获在catch
块中,而是被捕获在AppDomain
的{{1}}处理程序中。