Avatar billede thomaxz Nybegynder
22. maj 2007 - 08:40 Der er 3 kommentarer og
1 løsning

Gemme billede i mysql via odbc

Jeg opret forbindels i til min mysql server

static string constr = "DSN=DSN255;uid=****;pwd=****;database=db255";

DSN255 er oprette i windows 2000 Datakilder(odbc) administration

    public static void sqlnonread(string sql)
        {
            System.Data.Odbc.OdbcConnection con = new System.Data.Odbc.OdbcConnection(constr);
            System.Data.Odbc.OdbcCommand cmd = new System.Data.Odbc.OdbcCommand(sql, con);
            con.Open();
            cmd.ExecuteNonQuery();           
            con.Close();
        }


nu er spørglset hvordan får jeg gemt et bilelde i databasen, jeg har fundet frem til at der skal bruges et felt af type blob.

og fundet en masse spørgsmål men uden svar.
har også fundet en del men de er til andre en odbc connection og har ikke kunne omsæt dem til odbc forbindelse.
Avatar billede dr_chaos Nybegynder
22. maj 2007 - 10:05 #1
Avatar billede thomaxz Nybegynder
22. maj 2007 - 10:23 #2
Den side havde jeg fundet, man kan ikke umidelbart finde ud af hvor den sætter ind i databasen, og kan heller ikke finde ud at convtere den asp.net kode til c# windows application.
Avatar billede dr_chaos Nybegynder
22. maj 2007 - 11:22 #3
Du smider denne metode ind i din klasse:
public string addImage(byte [] buffer,string extension)
    {
        string strSql = "SELECT * FROM File";
        DataSet ds = new DataSet("Image");
        OdbcDataAdapter tempAP = new OdbcDataAdapter(strSql,this._objConn);
        OdbcCommandBuilder objCommand = new OdbcCommandBuilder(tempAP);
        tempAP.Fill(ds,"Table");

        try
        {
            this._objConn.Open();
            DataRow objNewRow = ds.Tables["Table"].NewRow();
            objNewRow["Extension"] = extension;
            objNewRow["Data"] = buffer;
            ds.Tables["Table"].Rows.Add(objNewRow);
            // trying to update the table to add the image
            tempAP.Update(ds,"Table");
        }
        catch(Exception e){return e.Message;}
        finally{this._objConn.Close();}
        return null;
    }

Det er den som gør det via en tableadapter.
Avatar billede thomaxz Nybegynder
22. maj 2007 - 13:42 #4
Fandt en løsning som er nemmer at forstå:


For at gemmet bileldet

min tabel ser sådan her ud

id int auto_increment primary
img longblob

private void button1_Click(object sender, EventArgs e)
        {
            sqlstr = "INSERT INTO img (img) VALUES(?)"; //mysql kommando
           
            //databse connection
            System.Data.Odbc.OdbcConnection conn = new System.Data.Odbc.OdbcConnection(constr);
            System.Data.Odbc.OdbcCommand cmd = new System.Data.Odbc.OdbcCommand(sqlstr, conn);


            string BLOBFilNavn=sanitize("c:\\Eksempel.jpg"); //filnavn på billede

            //læs fil
            FileStream BLOBfs = new FileStream(BLOBFilNavn, FileMode.Open, FileAccess.Read);
            Byte[] BLOBbyte = new Byte[BLOBfs.Length];
            BLOBfs.Read(BLOBbyte, 0, BLOBbyte.Length);
            BLOBfs.Close();

            //lav ny paramter som gememr billedet
            System.Data.Odbc.OdbcParameter prm = new System.Data.Odbc.OdbcParameter("@fil",  System.Data.Odbc.OdbcType.Image, BLOBbyte.Length, ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, BLOBbyte);

            conn.Open(); //åben
            cmd.Parameters.Add(prm); //sæt paramter på komandoen
            cmd.ExecuteNonQuery(); //udfør den
            cmd.Dispose(); //luk

            MessageBox.Show("ok"); //vis bedsked

        }


læs billede


private void button2_Click(object sender, EventArgs e)
        {
            sqlread("SELECT * FROM img WHERE id='5' ORDER BY id ASC");  //sql for hente det bestemte billede

            while (rd.Read()) //så længe data
            {
                Byte[] BLOBbyte = new Byte[0]; //lav et byte array
                BLOBbyte = (Byte[])(rd["img"]); //sæt inhold af bloben ind i bytearret
                MemoryStream BLOBdata = new MemoryStream(BLOBbyte); //lav en mmeory strem
                this.pictureBox2.Image = Image.FromStream(BLOBdata); //sæt bilelde ind i pictuerbox.
            }
        }
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
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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