对于Sqlite.Net数据提供程序(System.data.Sqlite.dll)(新开发在这里分叉),我很难找出各种类及其方法引发的异常。我知道有SqliteException可以抛出,但什么时候抛出?
我已经确保我有附带的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注释。这解释了为什么SQLite.NET帮助文件或Visual Studio Intellisense都没有列出任何可能引发的异常。我创建了一个票证,请求xml注释包含异常,如果它在优先级列表中太低,我会自己添加它们。我会随时向任何感兴趣的人更新这个问题的最新进展。
您可以使用"暴力"方式搜索代码或通过异常的反射器进行搜索。
Es:reflector-->分析"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