循环来自数据库的所有图像并将其另存为JPG文件

时间:2016-07-28 12:33:18

标签: c# database image loops

我正在尝试从数据库中读取所有图像并将它们保存为jpg文件,我所做的是创建一个函数,每个图像将接收其ID作为名称。我的表看起来像是存在数据。

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();
}

1 个答案:

答案 0 :(得分:0)

您必须遍历表格行才能获得每张图片。例如:

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

你只是得到了表格的第一行。如果迭代DataSet,则无需执行以下操作(dr.Read())。我还假设你按照我上面的说法使用C#。