Невозможно привести объект типа 'system.byte' к типу 'system.iconvertible' - PullRequest
2 голосов
/ 19 февраля 2012

Я всегда получаю ошибку

, не могу привести объект типа 'system.byte' к типу 'system.iconvertible "

с моим кодом получения изображениясформируйте базу данных в графический блок через событие SelectedIndexChanged просмотра списка.

Вот мой код:

foreach (ListViewItem LVI in lvwInventory.SelectedItems)
{
    ////CONNECTION STRING TO THE DATABASE (USED FOR SAVING/UPLOADING IMAGE)
    //System.Data.OleDb.OleDbConnection con = new System.Data.OleDb.OleDbConnection("Provider=microsoft.jet.oledb.4.0; data source=..\\dbMyDVDOrganizer.mdb");
    con.Open();
    //OLEDB COMMAND FOR RETRIEVING IMAGE FROM THE DATABASE
    System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand("SELECT DVDImage FROM tblDVDInventory WHERE ItemCode='" + lvwInventory.SelectedItems[0].Text + "'");
    cmd.Connection = con;
    cmd.CommandType = CommandType.Text;
    System.Data.OleDb.OleDbDataAdapter da = new System.Data.OleDb.OleDbDataAdapter(cmd);
    DataSet ds = new DataSet();
    da.Fill(ds);
    Byte bits = Convert.ToByte(ds.Tables[0].Rows[0][0]);
    MemoryStream memoryBits = new MemoryStream(bits);
    Bitmap bitmap = new Bitmap(memoryBits);
    //BITMAP HAS THE IMAGE NOW.
    pctImage.Image = bitmap;
}

Где я допустил ошибку?

Ответы [ 2 ]

4 голосов
/ 19 февраля 2012

Просто дикая догадка: изображение DVDImage содержит больше, чем просто Byte ... может быть, байтовый массив (Byte[])?Замените

Byte bits = Convert.ToByte(ds.Tables[0].Rows[0][0]);

на

Byte[] bits = ds.Tables[0].Rows[0].Field<Byte[]>("DVDImage");

(или

Byte[] bits = (byte[])(ds.Tables[0].Rows[0][0]);

, если вы используете старую версию .NET Framework).

0 голосов
/ 19 февраля 2012

Попробуйте заменить

Byte bits = Convert.ToByte(ds.Tables[0].Rows[0][0]);

с

Byte[] bits = (Byte[])ds.Tables[0].Rows[0][0];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...