我正在尝试使数据库中的图像显示在Web表单上的图像按钮上。没有错误消息,但图像没有出现。只有一小部分表示出现在图像按钮上,但没有出现在数据库中的图像....
我的经纪人在这里:
public void ProcessRequest (HttpContext context)
{
Int32 Member_No;
if (context.Request.QueryString["id"] != null)
{
Member_No = Convert.ToInt32(context.Request.QueryString["id"]);
context.Response.ContentType = "image/jpeg";
Stream strm = ShowEmpImage(Member_No);
byte[] buffer = new byte[4096];
int byteSeq = strm.Read(buffer, 0, 4096);
while (byteSeq > 0)
{
context.Response.OutputStream.Write(buffer, 0, byteSeq);
byteSeq = strm.Read(buffer, 0, 4096);
}
}
else
{
context.Response.Write("No Image Found");
}
}
public bool IsReusable
{
get
{
return false;
}
}
public Stream ShowEmpImage(int Member_No)
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MyServer"].ConnectionString);
con.Open();
SqlCommand cmd = new SqlCommand("Select Photo from Members where Member_No = @ID", con);
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@ID", Member_No);
object img = cmd.ExecuteScalar();
try
{
return new MemoryStream((byte[])img);
}
catch
{
return null;
}
finally
{
con.Close();
}
}
}
答案 0 :(得分:0)
我只是从执行标量返回byte[]
并将字节写入流中。
public byte[] ShowEmpImage(int Member_No)
{
var settings = ConfigurationManager.ConnectionStrings["MyServer"];
using(var con = new SqlConnection(settings.ConnectionString))
using(var cmd = new SqlCommand("Select Photo from Members where Member_No = @ID", con))
{
con.Open();
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@ID", Member_No);
return (byte[])cmd.ExecuteScalar();
}
}
var image = ShowEmpImage(Member_No);
context.Response.WriteBytes(image);
context.Response.ContentType = "image/jpg";
BTW:我还会将你的ado.net组件包装在using
块中,以防止内存泄漏。