• 全部
  • .NET Framework
  • ASP
  • Web Services
  • .NET互联网桌面应用
  • VB
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • AppLauncher
  • 问答

如何将数据库中二进制格式的图片在显示在ASP.NET页面上

Eleve 2008-04-19 04:02:31
希望能给个例子(最好是C#的),谢谢!
图片显示希望是动态的
...全文
409 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Cool_xiaocao 2010-06-28
又是一个学习机会
回复
diguonianzhu 2009-11-23
6#很仔细!
回复
yuanmanguo 2008-04-19
mark
回复
yuanmanguo 2008-04-19
mark
回复
iuhxq 2008-04-19
SQL Server数据库代码


<%@ Page Language="C#" EnableViewState="true" %>

<%@ Import Namespace="System.Data.SqlClient" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
string strCnn = "Persist Security Info=False;User ID=sa;Password=;Initial Catalog=Book;Server=(local);";
protected void Button1_Click( object sender, EventArgs e )
{
System.IO.Stream fileDataStream = FileUpload1.PostedFile.InputStream;

if (fileDataStream.Length < 1)
{
Msg.Text = "请选择文件。";
return;
}

//得到文件大小
int fileLength = FileUpload1.PostedFile.ContentLength;

//创建数组
byte[] fileData = new byte[fileLength];
//把文件流填充到数组
fileDataStream.Read(fileData, 0, fileLength);
//得到文件类型
string fileType = FileUpload1.PostedFile.ContentType;

//构建数据库连接,SQL语句,创建参数

SqlConnection myConnection = new SqlConnection(strCnn);
SqlCommand command = new SqlCommand("INSERT INTO UserPhoto (UserName,ContentType,Photo)" +
"VALUES (@UserName,@ContentType,@Photo)", myConnection);

command.Parameters.AddWithValue("@UserName", TextBox1.Text);
command.Parameters.AddWithValue("@ContentType", fileType);
command.Parameters.AddWithValue("@Photo", fileData);

//打开连接,执行查询
myConnection.Open();
command.ExecuteNonQuery();
myConnection.Close();
Response.Redirect(Request.RawUrl);
}


protected void Page_Load( object sender, EventArgs e )
{

if (!Page.IsPostBack)
{
BindGrid();
}
}

private void BindGrid( )
{
SqlConnection myConnection = new SqlConnection(strCnn);
SqlCommand myCommand = new SqlCommand("SELECT * FROM UserPhoto Order By id DESC", myConnection);

try
{
myConnection.Open();
GridView1.DataSource = myCommand.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
GridView1.DataBind();
}
catch (Exception SQLexc)
{
Response.Write("提取数据时出现错误:" + SQLexc.ToString());
}
}
protected string FormatURL( object strArgument )
{
return "ReadImage.aspx?id=" + strArgument.ToString();
}

</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>上传文件到数据库</title>
</head>
<body>
<form id="MengXianhui" runat="server">
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<%#Eval("UserName") %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<img src="<%#FormatURL(Eval("id")) %>" /></ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<br />
<br />
姓名:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<br />
照片:<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="btnUpload" runat="server" Text="上传" OnClick="Button1_Click"></asp:Button>
<p>
<asp:Label ID="Msg" runat="server" ForeColor="Red"></asp:Label></p>
</form>
</body>
</html>

显示图片


<%@ Page Language="C#" %>

<%@ Import Namespace="System.Data.OleDb" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<script runat="server">

protected void Page_Load( object sender, EventArgs e )
{
////构建数据库连接,SQL语句,创建参数
//ACCESS数据库使用本注释部分
//string strCnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("Image2Access.mdb");
//OleDbConnection myConnection = new OleDbConnection(strCnn);
//OleDbCommand command = new OleDbCommand("select * from Person Where PersonID =" + Request.QueryString["id"], myConnection);
//myConnection.Open();
//OleDbDataReader dr = command.ExecuteReader();
//if (dr.Read())
//{
// Response.Clear();
// Response.AddHeader("Content-Type", dr["PersonImageType"].ToString());
// Response.BinaryWrite((byte[])dr["PersonImage"]);
//}
//dr.Close();
//myConnection.Dispose();

//构建数据库连接,SQL语句,创建参数
string strCnn = "Persist Security Info=False;User ID=sa;Password=;Initial Catalog=Book;Server=(local);";
SqlConnection myConnection = new SqlConnection(strCnn);
SqlCommand command = new SqlCommand("select * from UserPhoto Where id =" + Request.QueryString["id"], myConnection);
myConnection.Open();
SqlDataReader dr = command.ExecuteReader();
if (dr.Read())
{
Response.Clear();
Response.AddHeader("Content-Type", dr["ContentType"].ToString());
Response.BinaryWrite((byte[])dr["Photo"]);
}
dr.Close();
myConnection.Dispose();
}
</script>

创建SQL数据表语句


CREATE TABLE [UserPhoto] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[UserName] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[ContentType] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[Photo] [image] NOT NULL ,
CONSTRAINT [PK_UserPhoto] PRIMARY KEY CLUSTERED
(
[id]
) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO


关键字:ASP.NET2.0 上传文件 数据库
回复
iuhxq 2008-04-19
此问题经常被人问,本文列出将文字和图片上传到数据库的方法。包括Access数据库和SQL Server数据库。

Access数据库代码


<%@ Page Language="C#" EnableViewState="true" %>

<%@ Import Namespace="System.Data.OleDb" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

protected void Button1_Click( object sender, EventArgs e )
{
System.IO.Stream fileDataStream = FileUpload1.PostedFile.InputStream;

if (fileDataStream.Length < 1)
{
Msg.Text = "请选择文件。";
return;
}

//得到文件大小
int fileLength = FileUpload1.PostedFile.ContentLength;

//创建数组
byte[] fileData = new byte[fileLength];
//把文件流填充到数组
fileDataStream.Read(fileData, 0, fileLength);
//得到文件类型
string fileType = FileUpload1.PostedFile.ContentType;

//构建数据库连接,SQL语句,创建参数
string strCnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("Image2Access.mdb");
OleDbConnection myConnection = new OleDbConnection(strCnn);
OleDbCommand command = new OleDbCommand("INSERT INTO Person (PersonName,PersonEmail,PersonSex,PersonImageType,PersonImage)" +
"VALUES (@PersonName,@PersonEmail,@PersonSex,@PersonImageType,@PersonImage)", myConnection);

command.Parameters.AddWithValue("@PersonName",TextBox1.Text);
command.Parameters.AddWithValue("@PersonEmail", "mengxianhui@dotnet.aspx.cc");
command.Parameters.AddWithValue("@paramPersonSex", "男");
command.Parameters.AddWithValue("@PersonImageType", fileType);
command.Parameters.AddWithValue("@PersonImage", fileData);


//打开连接,执行查询
myConnection.Open();
command.ExecuteNonQuery();
myConnection.Close();
Response.Redirect(Request.RawUrl);
}


protected void Page_Load( object sender, EventArgs e )
{

if (!Page.IsPostBack)
{
BindGrid();
}
}

private void BindGrid( )
{
string strCnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
+ Server.MapPath("Image2Access.mdb");
OleDbConnection myConnection = new OleDbConnection(strCnn);
OleDbCommand myCommand = new OleDbCommand("SELECT * FROM Person", myConnection);

try
{
myConnection.Open();
GridView1.DataSource = myCommand.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
GridView1.DataBind();
}
catch (OleDbException SQLexc)
{
Response.Write("提取数据时出现错误:" + SQLexc.ToString());
}
}
protected string FormatURL( object strArgument )
{
return "ReadImage.aspx?id=" + strArgument.ToString();
}

</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>上传文件到数据库</title>
</head>
<body>
<form id="MengXianhui" runat="server">
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<%#Eval("PersonName") %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<%#Eval("PersonEmail") %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<%#Eval("PersonSex") %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<img src="<%#FormatURL(Eval("PersonID")) %>" /></ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<br />
<br />
姓名:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<br />
照片:<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="btnUpload" runat="server" Text="上传" OnClick="Button1_Click"></asp:Button>
<p>
<asp:Label ID="Msg" runat="server" ForeColor="Red"></asp:Label></p>
</form>
</body>
</html>

回复
oyjd614 2008-04-19

<%@ WebHandler Language="VB" Class="Handler" %>

Imports System
Imports System.Web
imports System.IO
imports System.Data
imports System.Data.SqlClient
Imports System.Configuration

Public Class Handler : Implements IHttpHandler

Private ConStr As String = ConfigurationManager.ConnectionStrings("ConnectionStore").ConnectionString

Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
'get images type
dim ImageType as String = context.Request.QueryString("type").ToString()
dim ID as Integer = ctype(context.Request.QueryString("id"),Integer)
'set output type
context.Response.ContentType = ImageType
context.Response.Cache.SetCacheability(HttpCacheability.Public)
context.Response.BufferOutput = False
dim Streams as Stream = nothing
'get picture stream from tbBannerAdv
Streams = GetPicture(ID)
'set buffer
dim BufferSize as Int32 = 1024*16
dim Bytes as Byte() = new Byte(BufferSize) {}
dim Count as Integer = Streams.Read(Bytes,0,BufferSize)
while Count>0
context.Response.OutputStream.Write(Bytes,0,Count)
Count = Streams.Read(Bytes,0,BufferSize)
end while
End Sub

Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
Get
Return True
End Get
End Property

'check input is null or empty
Private Function IsNotEmpty(ByVal text As String) As Boolean
Dim Result As Boolean
If String.IsNullOrEmpty(text) Then
Result = False
Else
Result = True
End If
Return Result
End Function

private function GetPicture(id as Integer) as Stream
dim QuerySql as String = "SELECT image FROM tbBannerAdv WHERE id=@ID"
if IsNotEmpty(id) then
using Con as SqlConnection = new SqlConnection(ConStr)
using Cmd as SqlCommand = new SqlCommand(QuerySql,Con)
try
Cmd.Parameters.AddWithValue("@ID",id)
Con.Open()
'get picture
dim Results as Object = cmd.ExecuteScalar()
'return picture stream
return new MemoryStream(ctype(Results,Byte()))
Catch ex As Exception
Con.Dispose()
end try
end using
end using
End If
End Function
End Class


<img src='Handler.ashx?id=<%# Eval("id") %>&type=<%# Eval("ImageMimetype")%>' alt="N/A"
width="160px" height="80px" border="0" />
回复
davidxu1969 2008-04-19
建一个Web页ShowImage.aspx

添加下面的代码:


protected void Page_Load(object sender, EventArgs e)
{
string id = Request["id"].ToString();
string connstr = "server=.;integrated security=sspi;database=Test";

SqlConnection connection = new SqlConnection(connstr);

SqlCommand cmd = new SqlCommand("select ImageData from MyPictures where Id="+id, connection);
connection.Open();
byte[] imageData = (byte[])cmd.ExecuteScalar();
connection.Close();
Response.OutputStream.Write(imageData, 0,imageData.Length);
}



然后就可以在别的窗体里动态显示图片了:

Image1.ImageUrl = "ShowImage.aspx?id=1";
Image2.ImageUrl = "ShowImage.aspx?id=55";
回复
davidxu1969 2008-04-19
楼上的可以,或者Response.OutputStream.Write(byte[] imgData);
回复
51超神哥 2008-04-19
Response.BinaryWrite(byte[] byte)
回复
zengxie 2008-04-19
OracleConnection conn=new OracleConnection(ConnectionString);
OracleDataAdapter oda=new OracleDataAdapter("select * from cym1.cym ",conn);
DataSet ds=new DataSet();
oda.Fill(ds);
if(ds.Tables[0].Rows.Count>0)
{
byte[] imgdata=(byte[])ds.Tables[0].Rows[(int)Session["pos"]][0];
Response.BinaryWrite(imgdata);
}
回复
相关推荐
发帖
.NET技术社区
创建于2007-09-28

5.8w+

社区成员

.NET技术交流专区
申请成为版主
帖子事件
创建了帖子
2008-04-19 04:02
社区公告
暂无公告