28. februar 2006 - 23:33
Der er
19 kommentarer
Læs image fra db
Halløj Jeg kan ikke læse billeder fra en SQL server 2000. Feltet er sat til datatypen image. Jeg prøver på at vise billedet med: <asp:Image ImageUrl="/ViewImage.aspx?PictureID=1" runat="server" ID="pic" /> ViewImage.aspx.cs indeholder så: SQL = "SELECT Picture FROM Pictures WHERE PictureID = " + Request.QueryString["PictureID"] ..... ..... if ( dr.Read()) { Response.Clear(); Response.ContentType = "image/jpeg"; Response.BinaryWrite((byte[])dr["Picture"].ToString()); } Men billedet vises ikke. Hvad er galt her?
Annonceindlæg fra Infor
28. februar 2006 - 23:47
#1
Skal den .ToString() vaere der ?
01. marts 2006 - 10:47
#2
Nej - det var et desperat forsøg fra min side for at få det til at virke. Virker heller ikke uden.
09. marts 2006 - 04:22
#3
hvilken HTML bliver sendt til browser fra asp:Image siden ? har (byte[])dr["Picture"] den rigtige længde ?
09. marts 2006 - 19:23
#4
HTML <img id="ctl00_ContentPlaceHolder1_pic" src="/ViewImage.aspx?PictureID=4" style="border-width:0px;" /> Hvordan finder jeg længden?
09. marts 2006 - 19:42
#5
HTML ser vist Ok ud noget debug kode i ViewImage.aspx
14. marts 2006 - 18:46
#6
Jeg tror jeg dropper det. Hvad ville du vælge hvis du havde valget mellem billeder i db og billeder som filer?
14. marts 2006 - 18:48
#7
billeder i db - medmindre billederne er meget store (mange MB) eller serveren er antik
14. marts 2006 - 19:02
#8
Hvorfor?
14. marts 2006 - 19:09
#9
nemmere at administrere (sikkerhed, backup, flytte mellem diske, transaktions integritet etc.)
14. marts 2006 - 19:42
#10
Ok - ja det var jo nogle gode pointer. Har du et forslag til den debug kode i ViewImage.aspx?
15. marts 2006 - 04:28
#11
fra lageret: <%@ import namespace="System.Data" %> <%@ import namespace="System.Data.SqlClient" %> <script language="C#" runat="server"> private const string CONNSTR = "Server=ARNEPC3;Integrated Security=SSPI;Database=Test"; void Page_Load(Object sender, EventArgs e) { string id = Request["id"]; /**/ SqlConnection con = new SqlConnection(CONNSTR); con.Open(); SqlCommand sel = new SqlCommand("SELECT pic FROM od WHERE id = " + id, con); byte[] b = (byte[])sel.ExecuteScalar(); con.Close(); /**/ /* byte[] b = (byte[])Cache.Get(id); if(b == null) { SqlConnection con = new SqlConnection(CONNSTR); con.Open(); SqlCommand sel = new SqlCommand("SELECT pic FROM od WHERE id = " + id, con); b = (byte[])sel.ExecuteScalar(); con.Close(); Cache.Insert(id, b); } */ Response.ContentType = "application/octet-stream"; Response.AddHeader("Content-Disposition", "attachment; filename=\"" + id + ".pic\""); Response.BinaryWrite(b); } </script>
15. marts 2006 - 04:30
#12
du skal ikke have Content-Disposition headeren men det skulle gerne give en ide om hvad det drejer sig om
15. marts 2006 - 04:31
#13
og din Content-Type er den rigtige
15. marts 2006 - 04:31
#14
til debug kan du bruge Trace
16. marts 2006 - 13:26
#15
Hmm - det virker stadig ikke for mig. Filen ViewImage.aspx viser bare System.Byte[] - og siden hvor billedet skal vise giver en billedfejl.
16. marts 2006 - 13:30
#16
Sådan her sætter jeg ind i databasen: public byte[] GetByteArrayFromFileField(FileUpload FileField) { HttpPostedFile File = FileField.PostedFile; byte[] Data = new Byte[File.ContentLength]; File.InputStream.Read(Data, 0, File.ContentLength); return Data; } public string FileFieldType(FileUpload FileField) { // Returns the type of the posted file if (!(FileField.PostedFile == null)) { return FileField.PostedFile.ContentType; } else { return ""; } } int FileFieldLength(FileUpload FileField) { // Returns the length of the posted file if (!(FileField.PostedFile == null)) { return FileField.PostedFile.ContentLength; } else { return 0; } } string SQL = "INSERT INTO Table (Data, Type, Length) VALUES ('" + GetByteArrayFromFileField(FileField) + "','" + FileFieldType(FileField) + "','" + FileFieldLength(FileField) + "')";
16. marts 2006 - 13:31
#17
Værdierne ser også fine ud i databasen.
07. april 2006 - 04:07
#18
jeg tror ikke på den måde at INSERT'e - der skal bruges parameters ved binære data !
07. april 2006 - 04:54
#19
code snippets: SqlConnection con = new SqlConnection(CONNSTR); con.Open(); SqlCommand ins = new SqlCommand("INSERT INTO od VALUES (@id, @pic)", con); ins.Parameters.Add("@id", SqlDbType.Int); ins.Parameters.Add("@pic", SqlDbType.Image); ins.Parameters["@id"].Value = is; ins.Parameters["@pic"].Value = bytarr; ins.ExecuteNonQuery(); con.Close();
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.