如何使用c#在asp.net中显示SqlServer2008中的图像
本文关键字:显示 SqlServer2008 图像 net 何使用 asp | 更新日期: 2023-09-27 18:15:39
可能重复:
什么';在asp.net中显示sql server数据库中的图像的最佳方式是什么
字节数组映像asp.net
如何使用c#在asp.net中显示SqlServer2008中的图像?
这就是我目前在代码库中得到的。然后我想获取图像并将其显示在我的.net页面的桌子上。(图像为.png
类型,存储为VarBinary
(
处理器
using System;
using System.Web;
using System.Drawing;
using System.Drawing.Imaging;
using System.Data;
using System.Data.SqlClient;
using System.Web.Caching;
using System.Configuration;
using System.Web.Configuration;
using System.IO;
namespace RocoSportsWA
{
public class DisplayImage : IHttpHandler, System.Web.SessionState.IRequiresSessionState
{
private SqlConnection _connection;
private SqlCommand _command;
private HttpContext _context;
public void ProcessRequest(HttpContext context)
{
}
public bool IsReusable
{
get
{
return true;
}
}
public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object state)
{
// Get the employee ID from the query string
string _logo = context.Request["Logo"];
if (String.IsNullOrEmpty(_logo))
return null;
int logo = 0;
bool ok = int.TryParse(_logo, out logo);
if (!ok) return null;
_context = context;
string conn = WebConfigurationManager.ConnectionStrings["Data Source=ROBEL-HP;Initial Catalog=RocoSportsDB;Integrated Security=True"].ConnectionString;
// Select the image from the database
_connection = new SqlConnection(conn);
_connection.Open();
_command = new SqlCommand("SELECT Logo from TEAM where Team = @HomeTeam, _connection");
_command.Parameters.AddWithValue("@HomeTeam", logo);
return _command.BeginExecuteReader(cb, state);
}
public void EndProcessRequest(IAsyncResult ar)
{
try
{
SqlDataReader reader = _command.EndExecuteReader(ar);
if (reader != null && reader.HasRows)
{
// Get the image returned in the query
reader.Read();
try
{
byte[] image = (byte[])reader[0];
// WRite the image into the HTTP response output stream
_context.Response.ContentType = "image/png";
// strip off the 78 byte Ole header (a relic from old MS Access databases)
_context.Response.OutputStream.Write(image, 78, image.Length - 78);
}
catch
{
}
}
}
finally
{
if (_connection != null)
_connection.Close();
}
}
}
}
网页
<asp:Image ID="HomeTeamImage" runat="server" ImageUrl='<%# "DisplayImage.cs?Logo=" + Eval("HomeTeam") %>'
Eval中的HomeTeam是一个标签,因为我从会话["HomeTeam"]中得到了文本
代码隐藏
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
namespace RocoSportsWA.Reporter
{
public partial class LiveGameReporting : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Match.Text = Session["HomeTeam"] + " vs. " + Session["AwayTeam"];
DateTime.Text = "Date: " + Session["Date"];
Stadium.Text = "Stadium: " + Session["Stadium"];
HomeTeam.Text = "" + Session["HomeTeam"];
AwayTeam.Text = "" + Session["AwayTeam"];
SqlConnection conn = new SqlConnection("Data Source=ROBEL-HP;Initial Catalog=RocoSportsDB;Integrated Security=True");
conn.Open();
SqlCommand HomeTeamcmd = new SqlCommand("SELECT Logo from TEAM where Team = @HomeTeam", conn);
SqlCommand AwayTeamcmd = new SqlCommand("SELECT Logo from TEAM where Team = @AwayTeam", conn);
HomeTeamcmd.Parameters.AddWithValue("@HomeTeam", Session["HomeTeam"]);
AwayTeamcmd.Parameters.AddWithValue("@AwayTeam", Session["AwayTeam"]);
conn.Open();
byte[] HomeTeamImageByte = (byte[])HomeTeamcmd.ExecuteScalar();
byte[] AwayTeamImageByte = (byte[])AwayTeamcmd.ExecuteScalar();
var bitmapImage = new BitmapImage();
bitmapImage.SetSource(new MemoryStream(HomeTeamImageByte));
Image1.Source = bitmapImage;
}
}
}
此代码将二进制blob转换为图像:
var bitmapImage = new BitmapImage();
bitmapImage.SetSource(new MemoryStream(imageData));
newImage.Source = bitmapImage;
其中CCD_ 3是类型CCD_。
只要正确设置了数据库映射,数据的格式就会正确。
实现这一点的最简单方法是将每个图像标记的src属性(或者,如果使用ASP.NET image控件,则将ImageUrl属性指向ASHX处理程序,该处理程序将接受查询字符串上的图像ID,执行相应的SQL查询,并将图像写入响应输出流。
这是最近的一篇文章,展示了如何异步实现这一点:
http://goo.gl/zCYKE