我正在尝试从数据库中读取所有图像并将它们保存为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();
}
答案 0 :(得分:0)
您必须遍历表格行才能获得每张图片。例如:
foreach (DataTable table in ds.Tables)
{
foreach (DataRow row in table.Rows)
{
_setimage(row[0], row[1]);
}
}
你只是得到了表格的第一行。如果迭代DataSet,则无需执行以下操作(dr.Read())。我还假设你按照我上面的说法使用C#。