Avatar billede dkkarpen Nybegynder
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?
Avatar billede arne_v Ekspert
28. februar 2006 - 23:47 #1
Skal den .ToString() vaere der ?
Avatar billede dkkarpen Nybegynder
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.
Avatar billede arne_v Ekspert
09. marts 2006 - 04:22 #3
hvilken HTML bliver sendt til browser fra asp:Image siden ?

har (byte[])dr["Picture"] den rigtige længde ?
Avatar billede dkkarpen Nybegynder
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?
Avatar billede arne_v Ekspert
09. marts 2006 - 19:42 #5
HTML ser vist Ok ud

noget debug kode i ViewImage.aspx
Avatar billede dkkarpen Nybegynder
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?
Avatar billede arne_v Ekspert
14. marts 2006 - 18:48 #7
billeder i db - medmindre billederne er meget store (mange MB) eller
serveren er antik
Avatar billede dkkarpen Nybegynder
14. marts 2006 - 19:02 #8
Hvorfor?
Avatar billede arne_v Ekspert
14. marts 2006 - 19:09 #9
nemmere at administrere (sikkerhed, backup, flytte mellem diske, transaktions
integritet etc.)
Avatar billede dkkarpen Nybegynder
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?
Avatar billede arne_v Ekspert
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>
Avatar billede arne_v Ekspert
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
Avatar billede arne_v Ekspert
15. marts 2006 - 04:31 #13
og din Content-Type er den rigtige
Avatar billede arne_v Ekspert
15. marts 2006 - 04:31 #14
til debug kan du bruge Trace
Avatar billede dkkarpen Nybegynder
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.
Avatar billede dkkarpen Nybegynder
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) + "')";
Avatar billede dkkarpen Nybegynder
16. marts 2006 - 13:31 #17
Værdierne ser også fine ud i databasen.
Avatar billede arne_v Ekspert
07. april 2006 - 04:07 #18
jeg tror ikke på den måde at INSERT'e - der skal bruges parameters ved
binære data !
Avatar billede arne_v Ekspert
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();
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester