好的,我有一些非常简单的代码,我将在下面发布。本质上,我有一个到数据库的连接,并且我想将查询中的列子集映射到特定类。问题是这些可能为空。
我想知道如果在特定行抛出异常是否有可能,我们可以从下一行恢复整个块。
因此,如果要执行下面的代码并且第 6 行捕获到错误。有没有一种优雅的方法来捕获异常并使代码在第 7 行恢复运行。本质上使它好像第 6 行从未执行过。
private static Column MapTableToColumn(OracleDataReader reader){
Column c = new Column();
c.ColumnName = Convert.ToString(reader["COLUMN_NAME"]);
c.DataType = Convert.ToString(reader["DATA_TYPE"]);
c.DataLength = Convert.ToInt32(reader["DATA_LENGTH"]);
c.DataPrecision = Convert.ToInt32(reader["Data_Precision"]);//<---Line 6
c.DataScale = Convert.ToInt32(reader["Data_scale"]);//<--- Line 7
c.AllowDBNull = Convert.ToBoolean(reader["ALLOW_DB_NULL"]);
c.IsReadOnly = Convert.ToBoolean(reader["IS_READ_ONLY"]);
c.IsLong = Convert.ToBoolean(reader["IS_LONG"]);
c.IsKey = Convert.ToBoolean(reader["IS_KEY"]);
c.KeyType = Convert.ToString(reader["KEY_TYPE"]);
c.IsUnique = Convert.ToBoolean(reader["IS_UNIQUE"]);
c.Description = Convert.ToString(reader["DESCRIPTION"]);
return c;
}
重要的是要注意我不是在寻求最佳实践,我不打算在实际代码中使用它(除非它绝对是天才)。我只是想知道这是否可能,如果可能的话,人们将如何去做。
我的研究
我的大部分研究都是主动的,而不是被动的。我会尝试知道在读取给定字段之前是否有可能为空。如果是,那么我会检查该字段是否为空,然后将其设置为默认值。它基本上避免了发生错误的可能性,我认为这是一个非常好的解决方案。我只是想尝试一下,因为我知道当抛出异常时,最内部的异常包含抛出它的行号。基于此,如果您将异常放在引发异常的类中,则假设您应该能够使用反射以便从最后一点继续运行。我只是不确定你会怎么做。我' 我还考虑了在每一行周围放置 try catch 的可能性,我认为这会非常有效;但是,我认为这会很丑陋。