Ms access 在经典ASP中从MS Access数据库读取图像

Ms access 在经典ASP中从MS Access数据库读取图像,ms-access,asp-classic,blob,Ms Access,Asp Classic,Blob,我正在尝试使用经典ASP中的以下代码从MS Access数据库读取JPG图像: Response.Expires = 0 Response.Buffer = TRUE Response.Clear Response.ContentType = "image/jpg" Set cn = Server.CreateObject("ADODB.Connection") cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & S

我正在尝试使用经典ASP中的以下代码从MS Access数据库读取JPG图像:

Response.Expires = 0
Response.Buffer = TRUE
Response.Clear

Response.ContentType = "image/jpg"

Set cn = Server.CreateObject("ADODB.Connection")
cn.Open  "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("/database/database.mdb")    

sqlString = "Select * from tblBusinessImages where fldID = " & request.querystring("id")
Set rs = cn.Execute(sqlString)
Response.BinaryWrite rs("fldImageData")
Response.End
但我不断收到一个错误,告诉我浏览器无法读取或显示图像

数据库字段“tblBusinessImages”是一个OLE字段,图像通过复制粘贴保存到其中,此时仅用于测试目的(这可能是一种错误的方式吗?)

现在我知道MS Access在BLOB对象中保存了额外的数据(正如MSDN所说:

如果BLOB数据中包含任何无关信息,则 此脚本将传递,图像将无法正确显示。 当您意识到大多数放置方法 BLOB字段中的图像以标题的形式放置额外信息 例如Microsoft Access和Microsoft Access 这两个应用程序都将OLE头保存在BLOB中 字段以及实际的二进制数据

)

我的问题是,在没有MS Access保存的额外数据/标题的情况下,如何从BLOB读取原始图像数据


谢谢。

经过一天的工作,我意识到了问题所在:问题在于图片保存到数据库的方式(手动)。

为了将图像保存到数据库,应使用以下代码:

Dim fileName
Dim conn
Dim rsTemp
Dim fldID
Dim sSQL
Dim mystream

Set mystream = Server.CreateObject("ADODB.Stream")
mystream.Type = 1
mystream.Open
mystream.LoadFromFile  "D:\Desktop\My Downloads\compose1.jpg"

Set conn = Server.CreateObject("ADODB.Connection")
Set rsTemp = Server.CreateObject("ADODB.Recordset")

conn.Open "DRIVER=Microsoft Access Driver (*.mdb);DBQ=" & Server.MapPath("/database/database.mdb")
sSQL = "Select fldImageData from tblBusinessImages where fldID = 1;"

rsTemp.Open sSQL, conn, 3, 3

rsTemp.Fields("fldImageData").AppendChunk mystream.Read

rsTemp.Update
rsTemp.Close
set mystream = nothing
Dim conn
Dim rsTemp
Dim sSQL
Dim fldID

fldID = Request.QueryString("id")

If Not fldID = "" And IsNumeric(fldID) Then

    Set conn = Server.CreateObject("ADODB.Connection")
    Set rsTemp = Server.CreateObject("ADODB.Recordset")

    conn.Open "DRIVER=Microsoft Access Driver (*.mdb);DBQ=" & Server.MapPath("/database/database.mdb")

    sSQL = "Select * from tblBusinessImages where fldID = " & request.querystring("id")

    rsTemp.Open sSQL, conn, 3, 3

    If Not rsTemp.EOF Then
        Response.ContentType = "image/jpeg"
        Response.BinaryWrite rsTemp("fldImageData")
    Else
        Response.Write("File could not be found")
    End If

    rsTemp.Close
    conn.Close

    Set rsTemp = Nothing
    Set conn = Nothing
Else
    Response.Write("File could not be found")
End If
为了从MS Access数据库读取图像,应使用以下代码:

Dim fileName
Dim conn
Dim rsTemp
Dim fldID
Dim sSQL
Dim mystream

Set mystream = Server.CreateObject("ADODB.Stream")
mystream.Type = 1
mystream.Open
mystream.LoadFromFile  "D:\Desktop\My Downloads\compose1.jpg"

Set conn = Server.CreateObject("ADODB.Connection")
Set rsTemp = Server.CreateObject("ADODB.Recordset")

conn.Open "DRIVER=Microsoft Access Driver (*.mdb);DBQ=" & Server.MapPath("/database/database.mdb")
sSQL = "Select fldImageData from tblBusinessImages where fldID = 1;"

rsTemp.Open sSQL, conn, 3, 3

rsTemp.Fields("fldImageData").AppendChunk mystream.Read

rsTemp.Update
rsTemp.Close
set mystream = nothing
Dim conn
Dim rsTemp
Dim sSQL
Dim fldID

fldID = Request.QueryString("id")

If Not fldID = "" And IsNumeric(fldID) Then

    Set conn = Server.CreateObject("ADODB.Connection")
    Set rsTemp = Server.CreateObject("ADODB.Recordset")

    conn.Open "DRIVER=Microsoft Access Driver (*.mdb);DBQ=" & Server.MapPath("/database/database.mdb")

    sSQL = "Select * from tblBusinessImages where fldID = " & request.querystring("id")

    rsTemp.Open sSQL, conn, 3, 3

    If Not rsTemp.EOF Then
        Response.ContentType = "image/jpeg"
        Response.BinaryWrite rsTemp("fldImageData")
    Else
        Response.Write("File could not be found")
    End If

    rsTemp.Close
    conn.Close

    Set rsTemp = Nothing
    Set conn = Nothing
Else
    Response.Write("File could not be found")
End If
这样,图像数据将作为长二进制数据保存在数据库的OLE字段中。读取时,它将作为可读图像数据发布到浏览器