2015-04-02 2 views
0

Мой код C# работает с базой данных OLE. В таблице под названием ProjectParty Я сохраняю значение изображения в байтах через WinForm. При этом у меня есть другая форма, которая должна позволить пользователям обновлять значения таблицы, включая picture.
enter image description here
Я пытаюсь использовать следующий код для обновления пользовательских изменений обратно в таблицу.Как обновить значение PictureBox в базе данных OLE с помощью C#

private void btnSaveChanges_Click(object sender, EventArgs e) 
{ 
    OleDbConnection oleDbConn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=HesabKetab.accdb;Persist Security Info=False"); 
    OleDbCommand oleDbCmd = new OleDbCommand("UPDATE ProjectParty SET [email protected], [email protected], [email protected], [email protected], [email protected], [email protected] " 
     + "WHERE [email protected]",oleDbConn); 
    //add parameters 
    oleDbCmd.Parameters.AddWithValue("@title", txtInstTitle.Text); 
    oleDbCmd.Parameters.AddWithValue("@manager", txtInstManager.Text); 
    oleDbCmd.Parameters.AddWithValue("@tel", txtOfficePhone.Text); 
    oleDbCmd.Parameters.AddWithValue("@mobile", txtMobileNo.Text); 
    oleDbCmd.Parameters.AddWithValue("@address", txtAddress.Text); 
    oleDbCmd.Parameters.AddWithValue("@id", Convert.ToInt32(comboInstID.SelectedValue.ToString())); 
    byte[] picByte = null; 
    if(pictureBoxInstLogo.Image!=DBNull.Value){ 
     picByte= (byte[])pictureBoxInstLogo.Image; 
    } 
    oleDbCmd.Parameters.AddWithValue("@picture", picByte); 
    try 
    { 
     oleDbConn.Open(); 
     oleDbCmd.ExecuteNonQuery(); 
    } 
    catch (Exception ex) { MessageBox.Show(ex.Message, "خطای دیتابیس", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } 

} 

Я получаю ошибки синтаксиса,

Оператор! = Не может быть применен к операндам типа System.Drawing.Image и System.DBNull.

и

Не удается неявно преобразовать System.Drawing.Image в байт [].

Как проверить, имеет ли изображение picturebox изображение и, если да, сохранить его содержимое обратно в базу данных?

ответ

1
pictureBoxInstLogo.Image != null 

это будет проверить, если PictureBox имеет изображение или нет,

, если у него есть изображение, вы должны преобразовать изображение в байтах, используя locacation;

picByte = System.IO.File.ReadAllBytes(pictureBoxInstLogo.ImageLocation) 
+0

picturebox был загружен из базы данных. у него все еще есть изображение? Мне кажется, что воображение предназначено для URL-адресов, таких как c: \ img.jpg. – JasonStack

+0

Я не использовал изображение, которое использует базу данных для изображений, хотя я бы отлаживал код и видел, что такое ImageLocation, когда изображение загружено из базы данных. – horHAY