Зациклить все изображения из базы данных и сохранить их как файл JPG.

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

ImageCode  Image

DHS001     Long Binary Data
DHS002     Long Binary Data
DHS003     Long Binary Data
DHS004     Long Binary Data
DHS005     Long Binary Data

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

public void _setimage(string imgCode, byte[] byteArrayIn)
{
    try
    {
        MemoryStream ms = new MemoryStream(byteArrayIn, 0, byteArrayIn.Length);
        ms.Write(byteArrayIn, 0, byteArrayIn.Length);
        Image returnImage = Image.FromStream(ms, true); 

        finalImage.Save("D:\\" + imgCode + ".jpg", ImageFormat.Jpeg);

        img = null;
        finalImage = null;
        ms.Close();
    }
    catch
    {
    }
}

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

public void createPhoto()
{
    if (con.State == ConnectionState.Open) { con.Close(); }
    SqlcommandString = "select ImageCode  Image from ImageTable order by Barcode";
    OleDbCommand cmd = new OleDbCommand(SqlcommandString, con);
    con.Open();
    OleDbDataAdapter da = new OleDbDataAdapter(cmd);
    DataSet ds = new DataSet();
    da.Fill(ds, "Personaldetails");
    OleDbDataReader dr = cmd.ExecuteReader();
    byte[] bimg; 
    while (dr.Read())
    {
         bimg = (byte[])ds.Tables[0].Rows[0][1];

         // this here is where i call the save image function to execute 
         _setimage(dr.GetValue(0).ToString(), bimg);
    }

    dr.Close();
    cmd.Dispose();
    con.Close();
}

person Bels    schedule 28.07.2016    source источник


Ответы (1)


Вы должны перебирать строки таблицы, чтобы получить каждое изображение. Например:

foreach (DataTable table in ds.Tables)
{
   foreach (DataRow row in table.Rows)
   {
      _setimage(row[0], row[1]);
   }
}

Вы получали только самую первую строку таблицы. Если вы повторяете свой DataSet, нет необходимости делать следующее while (dr.Read()). Я также предположил, что вы используете С#, судя по тому, что я видел выше.

person MGM_Squared    schedule 28.07.2016
comment
@Bels - Если это сработает, не могли бы вы принять мой ответ? - person MGM_Squared; 02.08.2016
comment
@Bels - Я говорю, что нужно принять ответ как решение проблемы, о которой вы упомянули. Должна быть кнопка, чтобы принять мой ответ. - person MGM_Squared; 04.08.2016