ahmed_sa Ответов: 1

Как сделать функцию обновления образа для доступа к 2007 году


Я работаю в windows form c#, работая с access 2007

мне нужно сделать функцию обновления изображения в access where = UserID

Но мне нужно знать, как делать функцию и как ее вызывать

public string updateimg(string UserID,string path)
       {
           string valuereturn = null;
           var oleDbConnection = new OleDbConnection(connection);
           var oleDbCommand = oleDbConnection.CreateCommand();
           oleDbCommand.CommandText = "Update AllPrinting set  qrimg=@qrimg where UserID=@UserID)";
           oleDbCommand.Parameters.AddWithValue("@UserID", "UserID");
           byte[] yourPhoto = path;
           oleDbCommand.Parameters.AddWithValue("@photo", yourPhoto);
           using (oleDbConnection)
           {
               oleDbConnection.Open();
               valuereturn= oleDbCommand.ExecuteNonQuery().ToString();
           }
           return valuereturn;
       }

проблема как присвоить значение байту в функции
и как вызвать эту функцию
я назначаю тип данных для поля qrimg OLEOBJECT
пожалуйста, помогите мне

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

Как сделать функцию обновления образа для доступа к 2007 году

1 Ответов

Рейтинг:
2

Jochen Arndt

Это зависит от того, хотите ли вы сохранить путь к файлу изображения или к самому изображению.

Путь хранится как любая другая строка.

Изображение должно храниться как BLOB (двоичный большой объект). Считайте файл изображения в byte буферизуйте и храните это:

byte[] buffer = File.ReadAllBytes(filename);
// ...
oleDbCommand.Parameters.AddWithValue("@photo", buffer);


[РЕДАКТИРОВАТЬ]
Существует также ошибка в вашем заявлении об обновлении. Так и должно быть
"Update AllPrinting set  qrimg=@qrimg where UserID=@UserID;"
вместо
"Update AllPrinting set  qrimg=@qrimg where UserID=@UserID)"

[/РЕДАКТИРОВАТЬ]


ahmed_sa

я делаю как показано ниже но обновления не происходит
пожалуйста, помогите мне
byte [] buffer = файл.ReadAllBytes(путь);


Метод oledbconnection объекта oledbconnection = новый объект oledbconnection(подключение);
string str = " Update AllPrinting set qrimg=@qrimg where UserID=@UserID";
Объект oledbcommand объект oledbcommand = новый объект oledbcommand();
метод oledbconnection.Открыть();
объект oledbcommand.Подключении = подключения oledbconnection;
объект oledbcommand.Ул. свойства commandtext = ;
объект oledbcommand.Параметры.AddWithValue ("@UserID", label4. Text);
byte[] yourPhoto = буфер;
объект oledbcommand.Параметры.AddWithValue ("@qrimg", yourPhoto);
использование (oleDbConnection)
{

объект oledbcommand.Метод executenonquery();

}
метод oledbconnection.Закрывать();

Jochen Arndt

Есть сообщение об ошибке?

Ловите исключения для обнаружения ошибок и получения сообщений об ошибках (см. https://msdn.microsoft.com/en-us/library/system.data.oledb.oledbexception (v=против 110). aspx).

Вы делаете обновление. Есть ли в вашей таблице столбец "qrimg" типа BLOB?

ahmed_sa

что тип большого двоичного объекта я не имею большого двоичного объекта тип я поставил колонки qrimg к DataType oleobject
кроме того, эти два столбца существуют в таблице AllPrinting

Jochen Arndt

BLOB-это тип объекта. Я просто спросил, чтобы быть уверенным.

А как насчет сообщения об ошибке?

ahmed_sa

я делаю так, чтобы поймать его не дать мне никакой ошибки
пожалуйста, помогите мне

Jochen Arndt

Извините, но у меня нет вашего кода или базы данных, и я не могу просматривать ваш экран.

Откуда вы знаете, что ничего не хранится?
Как вы проверяете, что ничего не обновляется?

ahmed_sa

да я проверяю пусто

Jochen Arndt

Когда ошибки нет, единственная причина, о которой я могу думать, - это то, что буфер пуст (файл.ReadAllBytes () терпит неудачу; например, потому, что файл не был найден).

Вы также можете обернуть весь свой код в блок try и перехватить любые исключения, чтобы убедиться, что все в порядке. Или используйте отладчик, чтобы пройти через ваш код и проверить данные.

ahmed_sa

http://www.mediafire.com/view/pwy2ccgc9lvg736/aaa.jpg

ahmed_sa

выше ссылка на мою таблицу в базе данных access

ahmed_sa

это экранная съемка

ahmed_sa

Я проверяю, что буфер равен нулю в отладчике, но путь имеет значение image bath
что я делаю сейчас

ahmed_sa

буфер равен нулю

Jochen Arndt

Тогда должно быть исключение или файл пуст.

ahmed_sa

изображение не пустое я проверяю
изображение имеет данные, потому что я показываю в отчете после добавления данных

ahmed_sa

проверьте съемку экрана отладчика

http://www.mediafire.com/view/ld88cr18xlz5cwq/imgenotnull.jpg

Jochen Arndt

Вы должны проверить его после того, как строка была обработана.
Это означает, что вы должны установить точку останова на следующей строке (или выполнить один шаг при достижении точки останова).

КСТАТИ:
Почему вы копируете буфер на свою фотографию?
Просто использовать
объект oledbcommand.Параметры.AddWithValue ("@qrimg", буфер);
или переименуйте буфер в yourPhoto.

ahmed_sa

не работать

ahmed_sa

я использую буфер вместо вашего фото не работает

Jochen Arndt

Последняя попытка:
Каковы свойства поля qrimg?
Это должно быть эффективно LONGBINARY.

ahmed_sa

как я это делаю я проверяю из базы данных nothing свойство с этим именем

Jochen Arndt

Первое изображение, которое вы опубликовали:
Выберите поле qrimg и проверьте настройки на вкладке Общие ниже.

ahmed_sa

Я меняю код на
пробовать
{
//byte [] buffer = файл.ReadAllBytes(путь);
byte[] buffer= ImageToBytes(pictureBox1. Image, ImageFormat.Jpeg);

Метод oledbconnection объекта oledbconnection = новый объект oledbconnection(подключение);
string str = " Update AllPrinting set qrimg=@qrimg where UserID=@UserID";
Объект oledbcommand объект oledbcommand = новый объект oledbcommand();
метод oledbconnection.Открыть();
объект oledbcommand.Подключении = подключения oledbconnection;
объект oledbcommand.Ул. свойства commandtext = ;
OleDbParameter param = новый OleDbParameter();
парам.OleDbType = OleDbType.Бинарные;
парам.Имяпараметра = "qrimg";
param. Value = буфер;
объект oledbcommand.Параметры.Добавить(парам);
Класса oledbparameter, параметр2 = новый класса oledbparameter();
параметр param2.OleDbType = OleDbType.Тип varchar;
параметр param2.Имяпараметра = "Идентификатор Пользователя";
параметр param2.Значение = label4.Текст;
объект oledbcommand.Parameters. Add (param2);
// объект oledbcommand.Параметры.AddWithValue ("@UserID", label4. Text);

// объект oledbcommand.Параметры.AddWithValue ("@qrimg", буфер);
использование (oleDbConnection)
{

объект oledbcommand.Метод executenonquery();

}
метод oledbconnection.Закрывать();
}
поймать (исключение бывший)
{
Ящик для сообщений.Показать (например, сообщение);
}
он обновляет поле qrimg, но отображается как
ниже экрана съемки
http://www.mediafire.com/view/6yqinw5uchnk3ln/longbinary.jpg

ahmed_sa

он показывает на поданных длинных двоичных данных qrimg
так что что это такое правильно добавлено или неправильно
он не открывается при щелчке

Jochen Arndt

Значит, есть данные (я на самом деле не могу открыть изображения)?

"он не открывается при щелчке"
Где вы нажимаете (в Access)?
Это нормально, потому что Access не знает, как интерпретировать данные. Это зависит от приложения, которое использует данные, чтобы узнать, что это такое (например, проверяя, является ли это допустимым форматом изображения).

ahmed_sa

можете ли вы помочь мне, пожалуйста

ahmed_sa

да я нажимаю на Открыть

ahmed_sa

это означает правильный или нет только один ответ

Jochen Arndt

Я вас здесь не понял.

Если сейчас в поле есть данные, все в порядке. Затем вы можете прочитать их из своего приложения и отобразить изображение.

ahmed_sa

Хорошо спасибо за ответ
большое вам спасибо за помощь