C#中的SQLite使用.GetBytes抛出“InvalidCastException”

时间:2012-05-24 22:34:30

标签: c# sqlite

我试图在一个SQLite数据库中访问一个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()

InnerException:

SQLiteDataReader.VerifyType()似乎抛出异常,这是查看用于DbType.Binary类型的列,如果列不是DbType.Binary,DbType.String或DbType,则抛出异常.Guid。我一遍又一遍地检查了表格,它仍然将列类型显示为blob。

2 个答案:

答案 0 :(得分:1)

它抛出一个InvalidCastException的事实当然是错误的,但你的代码 已经破坏 - temp将为null,这肯定不应该。您没有在任何地方提供要读取的数据。

没有注意到GetBytes的回复价值,我希望你这样做......

编辑:只是为了检查......你 试图从适当的列中读取,对吗?如果您尝试在(例如)整数列上调用InvalidCastExceptionGetBytes会更合适。

答案 1 :(得分:0)

我终于通过使用参数并将我的Blob设置为DbType.Binary来解决问题。不知道为什么这与我以前做的如此不同,但现在一切正常。