Member 11699268 Ответов: 3

Vb.net вставка значения varbinary в базу данных access


Всем Привет

Я пытаюсь использовать следующий код для вставки файла в поле VarBinary в базе данных Access, используя следующий код :

'SQLStr = 	UPDATE [Documents] Set [EmbeddedDocument]=@EmbeddedDocument WHERE [Project]='test' AND [hole_id]='test';

Dim command As New OdbcCommand(SQLStr, x.Connection)
' command.Parameters.AddWithValue(Parametername, ByteStream)
 command.Parameters.Add(Parametername, OdbcType.VarBinary).Value = ByteStream
 command.Parameters(0).Size = ByteStream.Length
                    
command.ExecuteNonQuery()
command.Dispose()


Я получаю ошибку "слишком мало параметров, ожидаемых 1", но не могу понять, где это происходит неправильно. Я пытался .Добавлять и .Addwithvalue и я вижу, что параметр был добавлен к параметрам командного объекта, но никакой радости!

Спасибо

Стив

Что я уже пробовал:

Все, кроме того, что работает

3 Ответов

Рейтинг:
0

OriginalGriff

Используйте отладчик и проверьте имена параметров: is Parametername установить правильно? Если это не так, то движок Odbc не сможет сопоставить его с параметром в инструкции SQL, и вы получите сообщение об ошибке.
Также проверьте значение ByteStream и убедитесь, что там есть данные (вряд ли это будет проблемой, но если у вас есть отладчик, все равно проверьте).
Попробуйте перейти на:

SQLStr = "UPDATE [Documents] Set [EmbeddedDocument]=@ED WHERE [Project]='test' AND [hole_id]='test';"
Dim command As New OdbcCommand(SQLStr, x.Connection)
command.Parameters.AddWithValue("@ED", ByteStream)
И посмотрим, исправит ли это ситуацию.


Рейтинг:
0

Member 11699268

Кажется, что работа такая:

SQLStr = "UPDATE [Documents] Set [EmbeddedDocument]=? WHERE [Project]='test' AND [hole_id]='test';"
Dim command As New OdbcCommand(SQLStr, x.Connection)
command.Parameters.AddWithValue("@ED", ByteStream)


Я не уверен, что это особенность драйвера ODBC?


Рейтинг:
0

Member 11699268

Привет ОГ, к сожалению, я все еще получаю ту же ошибку. Я изменил имя параметра на другое имя для имени поля (@P), с тем же результатом.


Richard Deeming

Если вы хотите ответить на решение, нажмите кнопку "есть вопрос или комментарий?" кнопка под этим решением.

НЕ опубликуйте свой ответ как новое "решение".