SQLite в C# выдает «InvalidCastException», используя .GetBytesC#

Место общения программистов C#
Ответить
Anonymous
 SQLite в C# выдает «InvalidCastException», используя .GetBytes

Сообщение Anonymous »

Я пытаюсь получить доступ к столбцу Blob в базе данных SQLite, который в конечном итоге будет указателем на запись в файле или в памяти. Я пытаюсь использовать метод .GetBytes в SQLite, чтобы получить массив байтов, которые будут представлять мои данные. Я продолжаю получать исключение InvalidCastException при использовании этого метода. Кажется, что все на месте, и программа нормально компилируется, но во время выполнения это исключение продолжает выдаваться. Я поискал ответы, и, похоже, все соответствует имеющемуся у меня коду, поэтому я в растерянности и, к сожалению, не могу найти хорошей документации для SQLite на C#. Код следующий

Код: Выделить всё

  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;
}
Мне удалось прочитать другие столбцы в базе данных, которые представляют собой целые и текстовые числа, но по какой-то причине я не смог правильно понять большие двоичные объекты.

РЕДАКТИРОВАТЬ: новая информация. Вот трассировка стека из исключения:

Код: Выделить всё

     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. Я проверял таблицу снова и снова, и она по-прежнему показывает тип столбца как большой двоичный объект.

Подробнее здесь: https://stackoverflow.com/questions/107 ... g-getbytes
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»