【问题标题】:How to know when/what exceptions are thrown by System.Data.Sqlite objects?如何知道 System.Data.Sqlite 对象何时/抛出什么异常?
【发布时间】:2011-09-20 15:30:58
【问题描述】:

对于Sqlite.Net data provider (System.Data.Sqlite.dll)(新开发已分叉here),我很难找出各种类及其方法引发的异常。我知道有可以抛出的 SqliteExceptions,但是什么时候?

我已确保我有随附的 System.Data.Sqlite.xml 文档文件,但它似乎没有列出每种方法引发的异常。

我不想将不必要的代码包装到 try/catch 块中(或者盲目地在任何地方捕获通用异常)。

我知道SqliteConnection是从DbConnection派生的,SqliteCommand是从DbCommand派生的,所以如果有必要我想我可以看看那里的文档。但是,没有一个基类会列出SqliteException,那么什么时候会抛出这些类型的异常呢?

PS - 我使用的是 1.0.64 版(从 2009 年开始...目前无法升级)。


更新:

由于缺乏响应,是否有人使用 System.Data.Sqlite.dll?如果是这样,您采用什么方法来处理库中可用对象可能引发的异常?有没有一些标准的方法来处理这些异常,因为似乎没有关于抛出的异常和哪些类的文档?


更新 2:

我确实设法在 c:\program files\SQLite.NET\Doc\ 下找到了 SQLite.NET 文档(似乎很明显)。到目前为止的文档很棒,但是它并没有告诉您抛出了哪些异常。到目前为止,我能做的最好的事情就是查看继承的基类或实现的接口,看看抛出了哪些异常。但是,这仍然无助于了解何时抛出 SqliteException 对象。


更新 3:

获得源代码后,似乎没有一个类本身包含任何/// <exception cref="ExceptionType">Something went wrong!</exception> xml cmets。这解释了为什么 SQLite.NET 帮助文件或 Visual Studio Intellisense 都没有列出任何可能引发的异常。我创建了一个ticket 请求xml cmets 包含异常,如果它们的优先级列表太低,我可以自己添加它们。对于任何可能感兴趣的人,如果有任何新的发展,我都会及时更新这个问题。

【问题讨论】:

  • 是的,风滚草徽章...*哭泣*
  • 他们在您的工单中为您提供了一些关于处理 xml 异常报告以及在此处更新工单状态的其他问题:system.data.sqlite.org/index.html/tktview?name=1c2dd41f57
  • @Mat Nadrofsky:感谢更新!
  • @Mat Nadrofsky:看起来他们实际上并没有问我问题......他们是修辞。他们基本上不确定如何详细了解异常(您是否记录了所有异常,包括可能由 .Net 框架抛出的异常,您是否包括那些冒泡且未在当前方法中处理的异常,您是否包括只有你明确抛出的),所以将其保持为低优先级。这一直是我想知道的正确方法的一个领域。
  • 这很令人沮丧。遗憾的是没有标准的方法来做到这一点。

标签: .net sqlite exception system.data.sqlite


【解决方案1】:

您可以使用“粗暴”方式搜索代码或通过反射器查找异常。

Es: 反射器 --> 分析“System.Data.SQLite.SQLiteException” --> 实例化者

    System.Data.SQLite.SQLite3.Bind_Blob(SQLiteStatement, Int32, Byte[]) : Void
    System.Data.SQLite.SQLite3.Bind_DateTime(SQLiteStatement, Int32, DateTime) : Void
    System.Data.SQLite.SQLite3.Bind_Double(SQLiteStatement, Int32, Double) : Void
    System.Data.SQLite.SQLite3.Bind_Int32(SQLiteStatement, Int32, Int32) : Void
    System.Data.SQLite.SQLite3.Bind_Int64(SQLiteStatement, Int32, Int64) : Void
    System.Data.SQLite.SQLite3.Bind_Null(SQLiteStatement, Int32) : Void
    System.Data.SQLite.SQLite3.Bind_Text(SQLiteStatement, Int32, String) : Void
    System.Data.SQLite.SQLite3.ChangePassword(Byte[]) : Void
    System.Data.SQLite.SQLite3.ColumnMetaData(String, String, String, String&, String&, Boolean&, Boolean&, Boolean&) : Void
    System.Data.SQLite.SQLite3.CreateCollation(String, SQLiteCollation, SQLiteCollation) : Void
    System.Data.SQLite.SQLite3.CreateFunction(String, Int32, Boolean, SQLiteCallback, SQLiteCallback, SQLiteFinalCallback) : Void
    System.Data.SQLite.SQLite3.GetIndexColumnExtendedInfo(String, String, String, Int32&, Int32&, String&) : Void
    System.Data.SQLite.SQLite3.Open(String, SQLiteOpenFlagsEnum, Int32, Boolean) : Void
    System.Data.SQLite.SQLite3.Prepare(SQLiteConnection, String, SQLiteStatement, UInt32, String&) : SQLiteStatement
    System.Data.SQLite.SQLite3.Reset(SQLiteStatement) : Int32
    System.Data.SQLite.SQLite3.SetPassword(Byte[]) : Void
    System.Data.SQLite.SQLite3.SetTimeout(Int32) : Void
    System.Data.SQLite.SQLite3.Step(SQLiteStatement) : Boolean
    System.Data.SQLite.SQLite3_UTF16.Bind_Text(SQLiteStatement, Int32, String) : Void
    System.Data.SQLite.SQLite3_UTF16.Open(String, SQLiteOpenFlagsEnum, Int32, Boolean) : Void
    System.Data.SQLite.SQLiteBase.CloseConnection(SQLiteConnectionHandle) : Void
    System.Data.SQLite.SQLiteBase.FinalizeStatement(SQLiteStatementHandle) : Void
    System.Data.SQLite.SQLiteBase.ResetConnection(SQLiteConnectionHandle) : Void
    System.Data.SQLite.SQLiteDataReader.CheckClosed() : Void
    System.Data.SQLite.SQLiteStatement.BindParameter(Int32, SQLiteParameter) : Void
    System.Data.SQLite.SQLiteTransaction.IsValid(Boolean) : Boolean

【讨论】:

  • 那么上面列出的每个方法都会实例化(并且可能会抛出)一个 SQLiteException 的实例?
  • 是的,我在 sqllite 程序集中寻找异常,我发现只有这个名称中有“异常”的类。然后我尝试实例化了哪个类。希望这可以帮助。抱歉这么晚才回复。我是 stackoverflow 的新手
  • 嗯,这不是我想要的,但这个技巧会派上用场。特别是因为看起来他们不打算很快记录异常情况。谢谢!
  • 使用反射器可以看到抛出异常的代码
  • 我真的应该更加熟悉反射器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-07
  • 2013-04-18
  • 2017-08-09
  • 2015-04-26
  • 2013-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多