Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: C# und .NET ::  Blob-Bild aus MySQL-DB laden bzw. speichern  
Gehen Sie zu Seite Zurück  1, 2
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
Wolkenflieger
Unregistrierter




Beitrag Wolkenflieger Unregistrierter 14:16:41 09.09.2010   Titel:              Zitieren

Leider komme ich immer noch nicht so recht vorwärts ... :(

Habe nun folgendes versucht - indem ich zunächst versuche das Bild in der DB zu speichern:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
//photobox is the picturebox holding picture
                private byte[] ImageToStream(Image photo)
                {

                Bitmap image = new Bitmap(photo);
                MemoryStream stream = new MemoryStream();
                image.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp);
                return stream.ToArray();
                }

                private void StoreData(byte[] content)
                {                
                    conn.Open();
                    if (conn.State.Equals(ConnectionState.Closed))
                        conn.Open();

                    try
                    {
                        MySqlCommand cmdInsert = new MySqlCommand("Insert into tblbild (id, bild) values('150',@image)", conn);
                        MySqlParameter imageParameter = cmdInsert.Parameters.Add("@image", SqlDbType.Binary);
                        imageParameter.Value = content;
                        imageParameter.Size = content.Length;
                        cmdInsert.ExecuteNonQuery();
                        MessageBox.Show("Speichern erfolgreich");
                    }

                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message.ToString());
                        MessageBox.Show(ex.StackTrace.ToString());
                    }
                    finally
                    {
                        conn.Close();
                    }
                }

           

       
        private void btnSpeichern_Click(object sender, EventArgs e)
        {
                            StoreData(ImageToStream(pictureBox2.Image));
        }
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
//photobox is the picturebox holding picture
private byte[] ImageToStream(Image photo)
{

Bitmap image = new Bitmap(photo);
MemoryStream stream = new MemoryStream();
image.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp);
return stream.ToArray();
}

private void StoreData(byte[] content)
{
conn.Open();
if (conn.State.Equals(ConnectionState.Closed))
conn.Open();

try
{
MySqlCommand cmdInsert = new MySqlCommand("Insert into tblbild (id, bild) values('150',@image)", conn);
MySqlParameter imageParameter = cmdInsert.Parameters.Add("@image", SqlDbType.Binary);
imageParameter.Value = content;
imageParameter.Size = content.Length;
cmdInsert.ExecuteNonQuery();
MessageBox.Show("Speichern erfolgreich");
}

catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
MessageBox.Show(ex.StackTrace.ToString());
}
finally
{
conn.Close();
}
}




private void btnSpeichern_Click(object sender, EventArgs e)
{
StoreData(ImageToStream(pictureBox2.Image));
}
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
//photobox is the picturebox holding picture
                private byte[] ImageToStream(Image photo)
                {

                Bitmap image = new Bitmap(photo);
                MemoryStream stream = new MemoryStream();
                image.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp);
                return stream.ToArray();
                }

                private void StoreData(byte[] content)
                {                
                    conn.Open();
                    if (conn.State.Equals(ConnectionState.Closed))
                        conn.Open();

                    try
                    {
                        MySqlCommand cmdInsert = new MySqlCommand("Insert into tblbild (id, bild) values('150',@image)", conn);
                        MySqlParameter imageParameter = cmdInsert.Parameters.Add("@image", SqlDbType.Binary);
                        imageParameter.Value = content;
                        imageParameter.Size = content.Length;
                        cmdInsert.ExecuteNonQuery();
                        MessageBox.Show("Speichern erfolgreich");
                    }

                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message.ToString());
                        MessageBox.Show(ex.StackTrace.ToString());
                    }
                    finally
                    {
                        conn.Close();
                    }
                }

           

       
        private void btnSpeichern_Click(object sender, EventArgs e)
        {
                            StoreData(ImageToStream(pictureBox2.Image));
        }


Und dann versuche genau das Bild zu laden:
Code:
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
                conn.Open();
                MySqlDataAdapter da = new MySqlDataAdapter("select bild from tblbild where id='150'", conn);
                DataSet ds = new DataSet();
                da.Fill(ds);
                conn.Close();
                byte[] content = (byte[])ds.Tables[0].Rows[0].ItemArray[0];
                MemoryStream stream = new MemoryStream(content);
                pictureBox1.Image = Image.FromStream(stream);
                conn.Close();
Code:
1
2
3
4
5
6
7
8
9
conn.Open();
MySqlDataAdapter da = new MySqlDataAdapter("select bild from tblbild where id='150'", conn);
DataSet ds = new DataSet();
da.Fill(ds);
conn.Close();
byte[] content = (byte[])ds.Tables[0].Rows[0].ItemArray[0];
MemoryStream stream = new MemoryStream(content);
pictureBox1.Image = Image.FromStream(stream);
conn.Close();
Code:
1
2
3
4
5
6
7
8
9
                conn.Open();
                MySqlDataAdapter da = new MySqlDataAdapter("select bild from tblbild where id='150'", conn);
                DataSet ds = new DataSet();
                da.Fill(ds);
                conn.Close();
                byte[] content = (byte[])ds.Tables[0].Rows[0].ItemArray[0];
                MemoryStream stream = new MemoryStream(content);
                pictureBox1.Image = Image.FromStream(stream);
                conn.Close();



Es erscheint zwar die Meldung "Speichern erfolgreich" - die ID wird auch in der Tabelle angelegt, aber es werden keine Daten (Bild) dazu gespeichert, folglich kann ja auch nichts angezeigt werden.

Hoffe Ihr könnt mir weiter helfen - in die PictureBox2 habe ich ein Bild geladen.
Wolkenflieger
Unregistrierter




Beitrag Wolkenflieger Unregistrierter 09:34:51 10.09.2010   Titel:              Zitieren

Bin langsam echt am Verzweifeln und probiere daher einiges aus ...

Hab nun eine neue Tabelle in MySQL erstellt:
ID -> VARCHAR(50)
Bild -> LONGBLOB

Und versuche so überhaupt mal ein Bild in der DB zu speichern:
Code:
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
MySqlCommand cmd = new MySqlCommand("INSERT INTO tblbild (ID,Bild) VALUES ('150',@Bild)", conn);
                String strPath = @"D:\5.jpg";
                FileStream fs = new FileStream(strPath, FileMode.Open, FileAccess.Read);
                Byte[] bytBlobData = new byte[fs.Length];
                fs.Read(bytBlobData, 0, bytBlobData.Length);
                fs.Close();
                MySqlParameter prm = new MySqlParameter("@Bild", MySqlDbType.VarBinary, bytBlobData.Length, ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, bytBlobData);
                cmd.Parameters.Add(prm);
                conn.Open();
                cmd.ExecuteNonQuery();
                conn.Close();
Code:
1
2
3
4
5
6
7
8
9
10
11
MySqlCommand cmd = new MySqlCommand("INSERT INTO tblbild (ID,Bild) VALUES ('150',@Bild)", conn);
String strPath = @"D:\5.jpg";
FileStream fs = new FileStream(strPath, FileMode.Open, FileAccess.Read);
Byte[] bytBlobData = new byte[fs.Length];
fs.Read(bytBlobData, 0, bytBlobData.Length);
fs.Close();
MySqlParameter prm = new MySqlParameter("@Bild", MySqlDbType.VarBinary, bytBlobData.Length, ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, bytBlobData);
cmd.Parameters.Add(prm);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
Code:
1
2
3
4
5
6
7
8
9
10
11
MySqlCommand cmd = new MySqlCommand("INSERT INTO tblbild (ID,Bild) VALUES ('150',@Bild)", conn);
                String strPath = @"D:\5.jpg";
                FileStream fs = new FileStream(strPath, FileMode.Open, FileAccess.Read);
                Byte[] bytBlobData = new byte[fs.Length];
                fs.Read(bytBlobData, 0, bytBlobData.Length);
                fs.Close();
                MySqlParameter prm = new MySqlParameter("@Bild", MySqlDbType.VarBinary, bytBlobData.Length, ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, bytBlobData);
                cmd.Parameters.Add(prm);
                conn.Open();
                cmd.ExecuteNonQuery();
                conn.Close();


Kann mir bitte jemand helfen und sagen, warum für das Bild nichts gespeichert wird?? Die Tabelle bleibt da gundsätzlich leer ... :(

DANKE im Voraus!!!
Dravere
Moderator

Benutzerprofil
Anmeldungsdatum: 13.06.2005
Beiträge: 7463
Beitrag Dravere Moderator 11:30:16 10.09.2010   Titel:              Zitieren

Probier mal statt "@image", bzw. "@Bild", eher "?image", bzw. "?Bild", zu verwenden.
Zudem, wenn ich mich recht erinnere, unterstützt MySqlCommand.Parameters direkt ein AddWithValue, wo man als zweiten Parameter ein Byte-Array übergeben kann.

Grüssli

_________________
Danke für die Hilfe, Antwort oder Meinung!
C++: Std-Lib Referenz
C# .Net: MSDN kennt die Antwort
witte
Mitglied

Benutzerprofil
Anmeldungsdatum: 08.01.2008
Beiträge: 1295
Beitrag witte Mitglied 11:34:05 10.09.2010   Titel:              Zitieren

http://forums.mysql.com/read.php?70,121236,121537#msg-121537
Wolkenflieger
Unregistrierter




Beitrag Wolkenflieger Unregistrierter 12:53:50 10.09.2010   Titel:              Zitieren

Zitat:

Probier mal statt "@image", bzw. "@Bild", eher "?image", bzw. "?Bild", zu verwenden.


Genial!!! Es funktioniert!
Nochmals vielen Dank für Eure Hilfe!
C/C++ Forum :: C# und .NET ::  Blob-Bild aus MySQL-DB laden bzw. speichern  
Gehen Sie zu Seite Zurück  1, 2
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.