| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 935 人关注过本帖
标题:[求助]用Datalist读取Access中的图片-->bygg转移
只看楼主 加入收藏
zhangp1103
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2007-3-26
收藏
 问题点数:0 回复次数:6 
[求助]用Datalist读取Access中的图片-->bygg转移
我想用datalist读取Images.mdb中的图片。其中Images.mdb包含两个字节:id(自动编号),img(OLE对象)。

我给datalist中的img对象的src设置为"src="Handler.ashx?id=<%# Eval("id") %>"

下面是我在handler.ashx中的代码
------------------------------------------------------------------------------------------------------------------------------------
<%@ WebHandler Language="VB" Class="Handler" %>

Public Class Handler
Implements IHttpHandler

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

Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
' 设置响应设置
context.Response.ContentType = "image/gif"
context.Response.Cache.SetCacheability(HttpCacheability.Public)
context.Response.BufferOutput = False
' 设置 ID 参数
Dim id As Int32 = 1
Dim stream As IO.Stream = Nothing
Dim conn As New Data.OleDb.OleDbConnection(System.Configuration.ConfigurationManager.ConnectionStrings("Images").ConnectionString)
Dim command As Data.OleDb.OleDbCommand
Dim reader As Data.OleDb.OleDbDataReader
Dim buffersize As Integer = (1024 * 768)
Dim buffer() As Byte = New Byte((buffersize) - 1) {}
Dim count As Integer
If ((Not (context.Request.QueryString("id")) Is Nothing) _
AndAlso (context.Request.QueryString("id") <> "")) Then
id = [Convert].ToInt32(context.Request.QueryString("id"))
End If

conn.Open()
command = New Data.OleDb.OleDbCommand("SELECT * FROM Table1 WHERE id = " & id, conn)
reader = command.ExecuteReader()
reader.Read()
stream = New IO.MemoryStream(CType(reader("img"), Byte()))
count = stream.Read(buffer, 0, buffersize)

Do While (count > 0)
context.Response.OutputStream.Write(buffer, 0, count)
count = stream.Read(buffer, 0, buffersize)
Loop
End Sub

End Class
----------------------------------------------------------------------------------------------------------------------------

用断点监视,发现stream中已经有了数据,但最终还是无法在datalist中正常显示图片。我已经换了好几种办法了,可是都不能正常显示
还请各路大仙帮我想想找找看我的代码中有什么问题。
或者能告诉我新的办法。谢谢了
搜索更多相关主题的帖子: Datalist bygg Access Handler 
2007-10-10 16:33
zhangp1103
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2007-3-26
收藏
得分:0 
请帮帮我。。。。。。

2007-10-10 17:35
jxnuwy04
Rank: 2
等 级:新手上路
威 望:4
帖 子:768
专家分:0
注 册:2006-9-15
收藏
得分:0 
自己先插入一张图片,看看能读出来不?

------------------不为别的,就为你,我的理想!-----------------
2007-10-10 19:28
zhangp1103
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2007-3-26
收藏
得分:0 
可以的,调用Sqlserver数据库得存储过程就能正常的现实图片.

2007-10-11 08:26
jxnuwy04
Rank: 2
等 级:新手上路
威 望:4
帖 子:768
专家分:0
注 册:2006-9-15
收藏
得分:0 
我的意思是你先将一张图片插入到Access数据库中,再读,看看能否显示.

------------------不为别的,就为你,我的理想!-----------------
2007-10-11 08:35
zhangp1103
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2007-3-26
收藏
得分:0 
你是说不用Datalist,而直接读取access中的图片数据吗?
好的,我试试看吧.
谢谢你的提示

2007-10-11 08:42
zhangp1103
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2007-3-26
收藏
得分:0 
又出问题了。下面的代码使用picturebox读取图片。操作过程中出现了异常——未处理的“System.ArgumentException”类型的异常出现在 System.Drawing.dll 中

看来操作数据库中的图片还真是不容易。
Dim cn As System.Data.OleDb.OleDbConnection
Dim cmd As System.Data.OleDb.OleDbCommand
Dim dr As Data.OleDb.OleDbDataReader
Dim pictureColumn As Integer = 0
Dim b(1024 * 768) As Byte

Dim bs As System.IO.Stream = New System.IO.MemoryStream()
cn = New System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;" & _
"data source=E:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Loadpic\WindowsApplication1\Images.mdb")

cmd = New System.Data.OleDb.OleDbCommand("select * from Table1 WHERE id=" & 1, cn)

cn.Open()
dr = cmd.ExecuteReader()
dr.Read()
bs = New IO.MemoryStream(CType(dr("img"), Byte()))
PictureBox1.Image = Image.FromStream(bs)
dr.Close()
cn.Close()

2007-10-11 10:11
快速回复:[求助]用Datalist读取Access中的图片-->bygg转移
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025727 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved