首先,学习 http://www.iyunv.com/hedonister/archive/2005/06/14/174084.html
以下来自,他的内容
摘要
.NET 是由微软开发的一种新型的分布式计算平台,ASP.NET 是它针对Web 开发的编程模式。本文的目的是在开发数据驱动的ASP.NET Web 应用程序中获取一些好的经验。这个应用程序将告诉你怎么把一幅图片保存到数据库中以及怎样把图片从数据库中读取出来。它以ADO.NET 作为数据访问机制,C# 作为编程语言,SQL 2000 Server 作为后台数据库。
概述
一般的,很大的图片文件往往被保存在Web 服务器的文件夹中,而不是数据库中。在一些实例中,以银行系统为例,人们先把用户的签名做成图片文件,然后保存到数据库中。
在这个示范中,微软的SQL 2000 Server 被用作后台数据库。我使用了一种比较特殊的数据类型 image 。这 image 数据类型是被用来保存图片到数据库的。
所使用的控件:
System.Web.UI.HtmlControls.HtmlInputFile
System.Web.UI.WebControls.TextBox
System.Web.UI.WebControls.Button
所使用的名字空间:
using System.Data.SqlClient;
using System.Drawing;
using System.Data;
using System.IO;
using System.Drawing.Imaging;
编码
使用 HtmlInputFile 类,它可以用 标签来声明一个实例。下面的例子是一个完整的 ASPX 文件,它让用户上传图片文件以及图片的说明。OnUpload 方法把图片以及说明写到iSense 数据库的Picture 表中
1// 保存图片文件到数据库的源码
2
3public void OnUpload(Object sender, EventArgs e)
4
{
5// 从输入文件中创建一个 byte[]
6int len = Upload.PostedFile.ContentLength;
7 byte[] pic = new byte[len];
8 Upload.PostedFile.InputStream.Read (pic, 0, len);
9// 插入图片和说明到数据库中
10 SqlConnection connection = new
11 SqlConnection (@"server=INDIA\INDIA;database=iSense;uid=sa;pwd=india");
12 try
13 {
14 connection.Open ();
15 SqlCommand cmd = new SqlCommand ("insert into Image "
16 + "(Picture, Comment) values (@pic, @text)", connection);
17 cmd.Parameters.Add ("@pic", pic);
18 cmd.Parameters.Add ("@text", Comment.Text);
19 cmd.ExecuteNonQuery ();
20 }
21 finally
22 {
23 connection.Close ();
24 }
25}
26
上面创建的函数可以通过使用按钮的 onClick 属性来调用。
如何使用ADO.NET 技术从数据库中读取图片并把它显示在Web 页面上?
这里,我使用Web 页面来显示图片,而没有用其他任何控件。下面的代码是用来显示数据库中的图片。
1private void Page_Load(object sender, System.EventArgs e)
2{
3 MemoryStream stream = new MemoryStream ();
4 SqlConnection connection = new
5 SqlConnection (@"server=INDIA\INDIA;database=iSense;uid=sa;pwd=india");
6 try
7 {
8 connection.Open ();
9 SqlCommand command = new
10 SqlCommand ("select Picture from Image", connection);
11 byte[] image = (byte[]) command.ExecuteScalar ();
12 stream.Write (image, 0, image.Length);
13 Bitmap bitmap = new Bitmap (stream);
14 Response.ContentType = "image/gif";
15 bitmap.Save (Response.OutputStream, ImageFormat.Gif);
16 }
17 finally
18 {
19 connection.Close ();
20 stream.Close ();
21 }
22}
23
GDI+ 函数为操作和定义图片提供了一个丰富的功能集合。本文的例子只能看到它的一小部分功能。你可以使用 System.Drawing 和 System.Drawing.Imaging 名字空间来调用这些功能。举例来说,你可以开发在Web 上保存和管理图片文件的应用程序,或者你可以一个简单、易配置的应用程序使用户能够操作图片。
如何运行程序?
首先,创建一个虚拟目录,把你的工程文件放到这虚拟目录中。然后改变服务器名称,数据库名称以及表的名称,如下所示:
1SqlConnection connection = new SqlConnection("server=localhost;database=mypictures;uid=sa;pwd=");
然后公布你的工程以获得最好的结果。
下面我我的体会:
使用背景: 在查询出来的 用户信息 ,双击用户,弹出包括相片的用户基本信息
在CombinationQueryShow.aspx 的datagrid_ItemDataBound 事件里面写如下
if(e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
{
//为数据项添加鼠标单击属性 打开
e.Item.Attributes.Add("ondblclick", "window.open('Person_ContentShow.aspx?PersonInfoID="+e.Item.Cells[0].Text+"' ,'个人信息详细显示','width=800,height=600,resizable=yes,top=100,left=100'"+");");
}
Person_ContentShow.aspx 页面的HTML 内容如下:
1
2
3
4
5 个人详细信息显示
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 照片
27
28
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
55
57
58
59
60
61
62
63
64
65
66
67
68
69 中组部多记录信息集
71
73
74
75
76
77
78
79
80
81
82
83
84 子女情况多记录信息集
86
88
89
90
91
92
93
94
95
96
97
98
99 非固定补贴情况多记录信息集
101
103
104
105
106
107
108
109
110
111
112
113
114 离休后奖惩情况多记录信息集
116
118
119
120
121
122
123
124
125
126
127
128
129 住院信息
131
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
关键部分是:
这里需要生成 ImagePage.aspx 页面
在 ImagePage.aspx 页面 编写代码如下:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.IO;
using System.Drawing.Imaging;
namespace Oceansoft.LGB.WEBUI.admin.search
{
/**////
/// ImagePage 的摘要说明。
///
public class ImagePage : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
// if (Page.IsPostBack)
// {
Laod_Image();
// }
//加载图象信息
}
private void Laod_Image()
{
string PersonInfoID=Request.QueryString["PersonInfoID"];
string str_sqlGetImage="select A9901 from LGBPInfo where PersonInfoID='"+PersonInfoID+"'";
//图象处理
readImage(str_sqlGetImage);
}
private void readImage(string str_sql)
{
// try
// {
// CommonInterface CIF=new CommonSql(strConn);
// IDataReader dbRead=CIF.ExeForDtr(str_sql);
// if (dbRead.Read())
// {
// Response.Clear();
// byte[] imageData =(byte[])dbRead["A9901"];
// Int32 imageSize = imageData.Length;
// Response.ContentType=dbRead["A9901"].ToString();
// Response.OutputStream.Write(imageData, 0, imageSize);
// //Response.BinaryWrite(imageData);
// CIF.Close();
// }
// else
// {
// CIF.Close();
// }
// //// Clear Response buffer
// Response.End();
// }
// catch (Exception exe)
// {
// //throw exe;
// }
MemoryStream stream=new MemoryStream();
string strConn=(string)Session["str_Conn"];//数据库连接字串
SqlConnection connection=new SqlConnection(strConn);
try
{
connection.Open();
SqlCommand command=new SqlCommand(str_sql,connection);
byte[] image=(byte[])command.ExecuteScalar();
stream.Write(image,0,image.Length);
Bitmap bitImage=new Bitmap(stream);
Response.ContentType="image/gif";
bitImage.Save(Response.OutputStream,ImageFormat.Gif);
}
catch
{
//获得空白图片文件的路径 c:\inetpub\wwwroot\LGBWEB\admin\search
string strblandImagePath= Server.MapPath("");
//c:\inetpub\wwwroot\LGBWEB\admin\
strblandImagePath=strblandImagePath.Substring(0,strblandImagePath.Length-6)+"images\\blandImage.JPG";
/**////c:\inetpub\wwwroot\LGBWEB\admin\images\blandImage.JPG
//strblandImagePath+="images\blandImage.JPG";
FileStream FileBlandImagestream=File.OpenRead(strblandImagePath);
Bitmap bitImage=new Bitmap(FileBlandImagestream);
Response.ContentType="image/gif";
bitImage.Save(Response.OutputStream,ImageFormat.Gif);
}
finally
{
connection.Close();
stream.Close();
}
}
Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/**////
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
///
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
这里 blandImage.JPG文件是为了当 图片在数据库里面不存在的时候,显示一个空白的图片,blandImage.JPG是空白图片
运行通过
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com