读取sql server 数据库图片信息
首先,学习 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;
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.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]