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

Eleve 2008-04-19 04:02:31
希望能给个例子(最好是C#的),谢谢!
图片显示希望是动态的
...全文
628 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
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);
grearo 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);
}

62,241

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧