Google 网上论坛不再支持新的 Usenet 帖子或订阅项。历史内容仍可供查看。

Displaying SQL Images in ASP.NET pages

已查看 10 次
跳至第一个未读帖子

Lindsey Howell

未读,
2004年9月30日 10:33:152004/9/30
收件人
Hello,

I've encountered a problem when trying to display BLOB images from a SQL
database using VB.NET. This is the code which generates the error:

Dim mySqlConnection As SqlConnection = New
SqlConnection(connectionString)
Dim mySqlCommand As SqlCommand = New SqlCommand(queryString,
mySqlConnection)
Dim ms as MemoryStream = New MemoryStream
mySqlConnection.Open()
Dim img() As Byte = CType(mySqlCommand.ExecuteScalar,
Byte())
ms.Write(img, 0, img.Length)
Dim bmp As Bitmap = New Bitmap(ms)
Response.ContentType = "image/gif"
bmp.Save(Response.OutputStream, ImageFormat.Gif)
mySqlConnection.Close()
mySqlConnection = Nothing
ms.Close()

This approach is suggested on several websites. However, when i run the code
it errors on the line where the bitmap (bmp) is declared, with the error
message:

System.ArgumentException: Invalid parameter used. at
System.Drawing.Bitmap..ctor(Stream stream) at ...

Does anyone have an ideas what could be causing this?

Thanks,

Lindsey


Cor Ligthert

未读,
2004年9月30日 10:51:542004/9/30
收件人
Lindsey,

This is a very complete sample I made a while ago, I even do not know if it
is still correct. It does not show the image as blob however as a nice
thumbnail in a real webpage (which you can change as you want to delete that
part and take the original image).

See what you can do with it.

I hope this helps?

Cor

\\\For the database the image database sample from the Resource kit however
you can change that of course for your own database..
\\\It needs 2 forms with a listbox, a picturebox and a label on form1
\\\webform1
Private Sub Page_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
If Not IsPostBack Then
Dim conn As New SqlClient.SqlConnection _
("Server=localhost;" & "DataBase=Northwind;" & _
"Integrated Security=SSPI")
Dim da As New SqlClient.SqlDataAdapter _
("SELECT FileName, PictureID FROM Picture", conn)
Dim ds As New DataSet
Me.Image1.Visible = False
ListBox1.AutoPostBack = True
Try
da.Fill(ds)
ListBox1.DataSource = ds.Tables(0)
ListBox1.DataTextField = "FileName"
ListBox1.DataValueField = "PictureID"
ListBox1.DataBind()
Catch sqlExc As SqlClient.SqlException
Me.Label1.Text = sqlExc.ToString
Catch exc As Exception
Me.Label1.Text = exc.ToString
End Try
End If
End Sub
Private Sub ListBox1_SelectedIndexChanged(ByVal sender _
As System.Object, ByVal e As System.EventArgs) _
Handles ListBox1.SelectedIndexChanged
Session.Item("img") = ListBox1.SelectedItem.Value
Image1.Visible = True
Image1.ImageUrl = "http://localhost/WebImage/WebForm2.aspx"
End Sub
///
\\\Webform1
Private Sub Page_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Dim conn As New SqlClient.SqlConnection("Server=localhost;" & _
"DataBase=Northwind;" & "Integrated Security=SSPI")
Dim sqlstr As String = _
String.Format("SELECT Picture FROM Picture WHERE (PictureID = {0})", _
CInt(Session.Item("img")))
Dim cmd As New SqlClient.SqlCommand(sqlstr, conn)
conn.Open()
Dim rdr As SqlClient.SqlDataReader = cmd.ExecuteReader()
rdr.Read()
Dim arrImage() As Byte
arrImage = (CType(rdr.Item("Picture"), Byte()))
Dim ms1 As New System.IO.MemoryStream(arrImage)
Dim origimage As System.drawing.Image
origimage = System.Drawing.Image.FromStream(ms1)
Dim PThumbnail As System.drawing.Image
PThumbnail = origimage.GetThumbnailImage(100, 100, Nothing, New IntPtr)
Dim ms2 As New System.IO.MemoryStream
PThumbnail.Save(ms2, Imaging.ImageFormat.Bmp)
arrImage = ms2.GetBuffer
Response.BinaryWrite(arrImage)
rdr.Close()
conn.Close()
End Sub
///

"Lindsey Howell" <lho...@xonitek.co.uk>

Lindsey Howell

未读,
2004年9月30日 11:15:102004/9/30
收件人
Thanks, but I've tried implementing it and I still end up with the same
error:

System.ArgumentException: Invalid parameter used. at

System.Drawing.Image.FromStream(Stream stream, Boolean
useEmbeddedColorManagement) at System.Drawing.Image.FromStream(Stream
stream) at ...

Any other ideas?

"Cor Ligthert" <notmyfi...@planet.nl> wrote in message
news:O41oLzvp...@TK2MSFTNGP11.phx.gbl...

Cor Ligthert

未读,
2004年9月30日 14:39:022004/9/30
收件人
Lindsey,

I have renewed my sample completely and now it can run with the standard
Northwind database. A problem is that that has a special BLOB format in it,
so what is in my new sample as well. I hope it helps.

When you want the dump standard method, that I have it as well, when you
want that message than back.

I hope this helps?

Cor

\\\
\\\For the database the standard Northwind sample database.
\\\It needs 2 forms with one form 1 a listbox, a picturebox and a label


\\\webform1
Private Sub Page_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
If Not IsPostBack Then
Dim conn As New SqlClient.SqlConnection _

("Server=(Local); DataBase=Northwind;" & _


"Integrated Security=SSPI")
Dim da As New SqlClient.SqlDataAdapter _

("SELECT FirstName, EmployeeID FROM Employees", conn)


Dim ds As New DataSet
Me.Image1.Visible = False
ListBox1.AutoPostBack = True
Try
da.Fill(ds)
ListBox1.DataSource = ds.Tables(0)

ListBox1.DataTextField = "FirstName"
ListBox1.DataValueField = "EmployeeID"


ListBox1.DataBind()
Catch sqlExc As SqlClient.SqlException
Me.Label1.Text = sqlExc.ToString
Catch exc As Exception
Me.Label1.Text = exc.ToString
End Try
End If
End Sub
Private Sub ListBox1_SelectedIndexChanged(ByVal sender _
As System.Object, ByVal e As System.EventArgs) _
Handles ListBox1.SelectedIndexChanged
Session.Item("img") = ListBox1.SelectedItem.Value
Image1.Visible = True

Image1.ImageUrl = "http://localhost/TestWebImage/WebForm2.aspx"
'This is the location of the aspx files
End Sub
///
\\\webform2 watch that the Memstream, which is for Northwind
'the normal code is as well in it.


Private Sub Page_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load

Dim conn As New SqlClient.SqlConnection("Server=(Local);" & _
"DataBase=Northwind; Integrated Security=SSPI")


Dim sqlstr As String = _

String.Format("SELECT Photo FROM Employees WHERE (EmployeeID =

{0})", _
CInt(Session.Item("img")))
Dim cmd As New SqlClient.SqlCommand(sqlstr, conn)
conn.Open()
Dim rdr As SqlClient.SqlDataReader = cmd.ExecuteReader()
rdr.Read()

Dim arrImage() As Byte = DirectCast(rdr.Item("Photo"), Byte())
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Dim ms1 As New System.IO.MemoryStream(arrImage)
'The one above is for normal purpose, however Northwint has a
strange format
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim ms1 As New System.IO.MemoryStream(arrImage, 78,
arrImage.Length - 78)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim origimage As System.drawing.Image =

Lindsey Howell

未读,
2004年10月1日 08:06:572004/10/1
收件人
Excellent, got that working now.
I hadn't realised there was an offset on the image.
Thanks very much!


"Cor Ligthert" <notmyfi...@planet.nl> wrote in message

news:uIGaGyxp...@TK2MSFTNGP12.phx.gbl...

0 个新帖子