我正在尝试访问 SQLite DB 中的 Blob 列,该列最终将指向文件或内存中的记录。我正在尝试使用 SQLite 中的 .GetBytes 方法来获取代表我的数据的字节数组。使用此方法时,我不断收到 InvalidCastException。一切似乎都已经到位,程序编译得很好,但是在运行时这个异常不断被抛出。我四处寻找答案,一切似乎都与我的代码一致,所以我在这里不知所措,不幸的是,我在 C# 中找不到任何关于 SQLite 的好的文档。代码如下
public byte[] Output()
{
byte[] temp = null;
int col = Columns + 1;
if(read.Read())
{
read.GetBytes(col, 0, temp, 0, 2048); //exception is thrown here
}
return temp;
}
我已经能够读取数据库中的其他整数和文本列,但由于某种原因似乎无法正确获取 blob。
编辑:新信息,这是异常的堆栈跟踪:
StackTrace:
at System.Data.SQLite.SQLiteDataReader.VerifyType(Int32 i, DbType typ)
at System.Data.SQLite.SQLiteDataReader.GetBytes(Int32 i, Int64 fieldOffset, Byte[] buffer, Int32 bufferoffset, Int32 length)
at SQLiteSort.Sort.Output() in C:\Users\cjones\Documents\Visual Studio 2010\Projects\ConsoleApplication1\ConsoleApplication1\Sort.cs:line 192
at SQLiteSort.Sort.Main(String[] args) in C:\Users\cjones\Documents\Visual Studio 2010\Projects\ConsoleApplication1\ConsoleApplication1\Sort.cs:line 72
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
内部异常:
SQLiteDataReader.VerifyType() 似乎引发了异常,这是查看用于 DbType.Binary 类型的列,如果该列不是 DbType.Binary、DbType.String 或 DbType.Guid,则引发异常。我一遍又一遍地检查了表格,它仍然将列类型显示为 blob。