1

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;
    }

DB内の他のintとテキストの列を読み取ることができましたが、何らかの理由で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として表示されます。

4

2 に答える 2

1

それがスローするという事実はInvalidCastException確かに間違っているように見えますが、あなたのコード壊れていますtemp-nullになるでしょう、それは確かにそうではないはずです。データを読み取る場所を提供していません。

また、の戻り値に注意を払っていません。GetBytesこれは、私が期待していることです...

編集:確認するだけです...あなた適切な列から読み込もうとしていますよね?(たとえば)整数列InvalidCastExceptionを呼び出そうとしている場合は、ある程度適切です。GetBytes

于 2012-05-24T22:37:40.263 に答える
0

パラメータを使用し、BlobをDbType.Binaryに設定することで、最終的に問題を修正しました。なぜこれが以前とは違うのかわかりませんが、今はすべてが正常に機能しています。

于 2012-05-29T20:43:05.853 に答える