1.在Access中存储图片的字段为"Ole 对象"
2.将上传的文件存到 字节数组 中.
3.然后将该数据存到数据库里就行了.
1
private
void
UpLoadFile()
2 {
3 //get the file
4 Stream uploadStream = FileUpload1.PostedFile.InputStream;
5 int fileLengh = FileUpload1.PostedFile.ContentLength;
6 byte[] filedata = new byte[fileLengh];
7 uploadStream.Read(filedata, 0, fileLengh);
8 string filename = FileUpload1.PostedFile.FileName;
9 string filetype = FileUpload1.PostedFile.ContentType;
10
11 //
12 OleDbConnection conn = new OleDbConnection(CONSTRING);
13 OleDbCommand comm = new OleDbCommand();
14 comm.Connection = conn;
15
16 //comm.CommandText = "insert into person (name,photo) values("+TName.Text.Trim()+","++")";
17 //
18 comm.CommandText = "insert into person (name,photo) values (@name,@photo)";
19 //
20 OleDbParameter name = new OleDbParameter("@name",OleDbType.VarChar,50);
21 name.Value = "aaa";
22 comm.Parameters.Add(name);
23 OleDbParameter photo = new OleDbParameter("@photo", OleDbType.Binary);
24 photo.Value = filedata;
25 comm.Parameters.Add(photo);
26 //
27 conn.Open();
28 comm.ExecuteReader();
29 conn.Close();
30
31 }
2 {
3 //get the file
4 Stream uploadStream = FileUpload1.PostedFile.InputStream;
5 int fileLengh = FileUpload1.PostedFile.ContentLength;
6 byte[] filedata = new byte[fileLengh];
7 uploadStream.Read(filedata, 0, fileLengh);
8 string filename = FileUpload1.PostedFile.FileName;
9 string filetype = FileUpload1.PostedFile.ContentType;
10
11 //
12 OleDbConnection conn = new OleDbConnection(CONSTRING);
13 OleDbCommand comm = new OleDbCommand();
14 comm.Connection = conn;
15
16 //comm.CommandText = "insert into person (name,photo) values("+TName.Text.Trim()+","++")";
17 //
18 comm.CommandText = "insert into person (name,photo) values (@name,@photo)";
19 //
20 OleDbParameter name = new OleDbParameter("@name",OleDbType.VarChar,50);
21 name.Value = "aaa";
22 comm.Parameters.Add(name);
23 OleDbParameter photo = new OleDbParameter("@photo", OleDbType.Binary);
24 photo.Value = filedata;
25 comm.Parameters.Add(photo);
26 //
27 conn.Open();
28 comm.ExecuteReader();
29 conn.Close();
30
31 }
在Access中显示图片:
在ASP.NET2.0中显示数据库中的图片,可以利用HttpHandler(.ashx)页面动态显示图片.
然后在GridView等控件的自定义模版中安置一个Image控件,并设置Image控件的ImageUrl属性为类似 XXX.ashx?photoId=1 即可显示图片
实例代码:
1
using
System;
2 using System.Web;
3 using System.Data.OleDb;
4 using System.IO;
5
6 public class Handler : IHttpHandler {
7
8 public void ProcessRequest (HttpContext context) {
9 context.Response.ContentType = "image/jpeg";
10 context.Response.Cache.SetCacheability(HttpCacheability.Public);
11 context.Response.BufferOutput = false;
12 int personId = -1;
13 Stream stream = null;
14 if (context.Request.QueryString["PersonID"] != null && context.Request.QueryString["PhotoID"] != "")
15 {
16 personId = Convert.ToInt32(context.Request.QueryString["PersonID"]);
17 stream = GetPhoto(personId);
18 }
19 const int buffersize = 1024 * 16;
20 byte[] buffer = new byte[buffersize];
21 int count = stream.Read(buffer, 0, buffersize);
22 while (count > 0)
23 {
24 context.Response.OutputStream.Write(buffer, 0, count);
25 count = stream.Read(buffer, 0, buffersize);
26 }
27 }
28
29 public Stream GetPhoto(int personId)
30 {
31 OleDbConnection myConnection = new OleDbConnection();
32 myConnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\db1.mdb";
33 OleDbCommand myCommand = new OleDbCommand("SELECT Photo FROM Person WHERE Id=@Id",myConnection);
34 myCommand.Parameters.Add(new OleDbParameter("@Id", personId));
35 myConnection.Open();
36 object result = myCommand.ExecuteScalar();
37
38 try
39 {
40 return new MemoryStream((byte[])result);
41 }
42 catch (ArgumentNullException e)
43 {
44 return null;
45 }
46 finally{
47 myConnection.Close();
48 }
49 }
50
51
52 public bool IsReusable {
53 get {
54 return false;
55 }
56 }
57
58}
最后在控件的模板中可以这样帮定,实例代码:
2 using System.Web;
3 using System.Data.OleDb;
4 using System.IO;
5
6 public class Handler : IHttpHandler {
7
8 public void ProcessRequest (HttpContext context) {
9 context.Response.ContentType = "image/jpeg";
10 context.Response.Cache.SetCacheability(HttpCacheability.Public);
11 context.Response.BufferOutput = false;
12 int personId = -1;
13 Stream stream = null;
14 if (context.Request.QueryString["PersonID"] != null && context.Request.QueryString["PhotoID"] != "")
15 {
16 personId = Convert.ToInt32(context.Request.QueryString["PersonID"]);
17 stream = GetPhoto(personId);
18 }
19 const int buffersize = 1024 * 16;
20 byte[] buffer = new byte[buffersize];
21 int count = stream.Read(buffer, 0, buffersize);
22 while (count > 0)
23 {
24 context.Response.OutputStream.Write(buffer, 0, count);
25 count = stream.Read(buffer, 0, buffersize);
26 }
27 }
28
29 public Stream GetPhoto(int personId)
30 {
31 OleDbConnection myConnection = new OleDbConnection();
32 myConnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\db1.mdb";
33 OleDbCommand myCommand = new OleDbCommand("SELECT Photo FROM Person WHERE Id=@Id",myConnection);
34 myCommand.Parameters.Add(new OleDbParameter("@Id", personId));
35 myConnection.Open();
36 object result = myCommand.ExecuteScalar();
37
38 try
39 {
40 return new MemoryStream((byte[])result);
41 }
42 catch (ArgumentNullException e)
43 {
44 return null;
45 }
46 finally{
47 myConnection.Close();
48 }
49 }
50
51
52 public bool IsReusable {
53 get {
54 return false;
55 }
56 }
57
58}
1
<
asp:GridView ID
=
"
GridView1
"
runat
=
"
server
"
AllowPaging
=
"
True
"
OnPageIndexChanged
=
"
GridView1_PageIndexChanged
"
OnPageIndexChanging
=
"
GridView1_PageIndexChanging
"
PageSize
=
"
1
"
>
2 < Columns >
3 < asp:TemplateField HeaderText = " Photo " >
4 < ItemTemplate >
5 < asp:Image ID = " Image1 " runat = " server " ImageUrl = ' <%# "Handler.ashx?PersonId=" + Eval("Id") %> ' Width = " 200px " />
6 </ ItemTemplate >
7 </ asp:TemplateField >
8 </ Columns >
9 </ asp:GridView >
2 < Columns >
3 < asp:TemplateField HeaderText = " Photo " >
4 < ItemTemplate >
5 < asp:Image ID = " Image1 " runat = " server " ImageUrl = ' <%# "Handler.ashx?PersonId=" + Eval("Id") %> ' Width = " 200px " />
6 </ ItemTemplate >
7 </ asp:TemplateField >
8 </ Columns >
9 </ asp:GridView >