C# 如何将数据库中的二进制列读入asp.net页面上的图像?
我想从数据库中读取存储在二进制字段中的图像并显示图像C# 如何将数据库中的二进制列读入asp.net页面上的图像?,c#,asp.net,C#,Asp.net,我想从数据库中读取存储在二进制字段中的图像并显示图像 while (reader.Read()) { byte[] imgarr = (byte[])reader["file"]; Stream s = new MemoryStream(imgarr); System.Drawing.Image image = System.Drawing.Image.FromStream(s); Graphics g = Graphi
while (reader.Read())
{
byte[] imgarr = (byte[])reader["file"];
Stream s = new MemoryStream(imgarr);
System.Drawing.Image image = System.Drawing.Image.FromStream(s);
Graphics g = Graphics.FromImage(image);
g.DrawImage(image, new Point(400, 10));
image.Save(Response.OutputStream, ImageFormat.Jpeg);
g.Dispose();
image.Dispose();
}
con.Close();
这段代码不起作用:
System.Drawing.Image image = System.Drawing.Image.FromStream(s);
我从中尝试了代码
我也犯了同样的错误“参数无效”。
也许我不知道什么,sql server或webconfig中的某些设置或其他内容。还有谁有从数据库获取图像的经验
该参数无效,原因是
错误消息。
db表包含数据。
我做错了什么
我觉得你说的那句话不管用。由于您没有说明图像的类型,可能是不支持的格式 否则,我将冒险猜测实际问题在
byte[] imgarr = (byte[])reader["file"];
字节数组没有包含您认为应该包含的数据。您所说的无效行在我看来是正确的。由于您没有说明图像的类型,可能是不支持的格式 否则,我将冒险猜测实际问题在
byte[] imgarr = (byte[])reader["file"];
而且字节数组不包含您认为应该包含的数据。通常将流位置设置为0会起到以下作用:
Stream s = new MemoryStream(imgarr);
s.Position = 0;
通常,将流位置设置为0可以实现以下目的:
Stream s = new MemoryStream(imgarr);
s.Position = 0;
您可能希望签出包含您正在查找的某些内容的文件
conn.Open();
SqlDataReader rdr = cmd.ExecuteReader();
if (rdr.Read())
{
... other code
byte[] filebytes = (byte[])rdr[FILE_STREAM];
result.FileBytes = new byte[filebytes.Length];
Array.Copy(filebytes, result.FileBytes, filebytes.Length);
}
具有文件写入代码
response.ContentType = file.ContentType;
byte[] buffer = new byte[file.ByteCount];
file.Read(buffer, 0, file.ByteCount);
response.BinaryWrite(buffer);
只要您在响应上设置了内容类型,并在响应中写入文件,您就不需要创建图像然后保存它(除非您正在对其进行编辑)。您可能希望签出文件中包含您要查找的内容
conn.Open();
SqlDataReader rdr = cmd.ExecuteReader();
if (rdr.Read())
{
... other code
byte[] filebytes = (byte[])rdr[FILE_STREAM];
result.FileBytes = new byte[filebytes.Length];
Array.Copy(filebytes, result.FileBytes, filebytes.Length);
}
具有文件写入代码
response.ContentType = file.ContentType;
byte[] buffer = new byte[file.ByteCount];
file.Read(buffer, 0, file.ByteCount);
response.BinaryWrite(buffer);
只要您在响应上设置了内容类型,并在响应中写入文件,您就不需要创建图像然后保存它(除非您正在对其进行编辑)。“不起作用”不是一个非常详细的诊断。到底发生了什么?是否正在引发异常?如果是这样,抛出的对象是什么和在哪里?您是否检查了
imgarr
是否保存了任何数据?始终将IDisposable对象包装在“使用”状态中。“不起作用”不是一个非常详细的诊断。到底发生了什么?是否正在引发异常?如果是这样,抛出的对象是什么和在哪里?您是否检查了imgarr
是否保存了任何数据?始终将IDisposable对象包装在“using”语句中。