내 통제 범위를 벗어나는 이유 때문에 SQLite 데이터베이스를로드하고 이진 데이터를 검색하는 .NET 2.0 어셈블리를 만들고 있습니다. 특히, PDF 문서.System.Data.SQLite.SQLIteDataReader.GetBlob을 사용하여 BLOB 필드를 검색하는 중 오류가 발생했습니다.
System.Data.SQLite.SQLiteDataReader.GetBlob 설명서에 (Ⅰ INT, 읽기 전용 부울)을 말한다 (강조 광산)
가 System.Data.SQLite.SQLiteBlob 오브젝트로서 열을 취득. 쿼리가 "rowid"열 또는 해당 별칭 중 하나를 포함하지 않는 경우 - 또는 - System.Data.SQLiteDataReader가 System.Data로 만들어지지 않은 경우이 쿼리는 ROWID없이 작성된 테이블에 대해서는 작동하지 않습니다. CommandBehavior.KeyInfo 플래그입니다.
using (SQLiteCommand getBooklet = new SQLiteCommand($"SELECT \"rowid\", File_Name FROM Booklets WHERE Id = {int.Parse(key)}", dbConnection))
내가 지금처럼 내 SQLiteDataReader을 인스턴스화 한 : 다음과 같이 나는 getBlob 나 (INT I, 부울 읽기 전용) 함수를 호출
using (SQLiteDataReader currentCustomerReader = getBooklet.ExecuteReader(System.Data.CommandBehavior.KeyInfo & System.Data.CommandBehavior.SequentialAccess))
:
여기
내 SQLiteCommand입니다
currentCustomerPdf = currentCustomerReader.GetBlob(1, true);
이것과 함께 eted :
System.InvalidOperationException: No RowId is available
at System.Data.SQLite.SQLiteBlob.Create(SQLiteDataReader dataReader, Int32 i, Boolean readOnly)
at System.Data.SQLite.SQLiteDataReader.GetBlob(Int32 i, Boolean readOnly)
...
내가 잘못하고 있니? 단계가 빠졌습니까? 버그를 신고해야합니까? 최신 버전에서 해결 된 .NET 2.0의 문제점입니까?
정말 BLOB에 임의 액세스해야합니까? 그냥 바이트 배열로 읽을 수 없습니까? –
지금 어떻게하는지 연구 중입니다. 왜 이런 일이 일어나고 있는지 잘 모르겠다. 정말 알고 싶다. Blob 객체의 코드는 더 간단하고 더 적은 줄을 필요로한다. – sonicbhoc
'SQLiteBlob' 객체는 분명히 [점진적 BLOB I/O] (http://www.sqlite.org/c3ref/blob_open.html)를 사용합니다. 하지만이 경우에는 왜 작동하지 않는지 나는 알지 못합니다. –