Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Alter Hase
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Bitmap bmp; // [...] // Buffer für komplette Bitmap reservieren // und Daten in den Buffer kopieren. char cData[ bmp.size ]; copy( cData, bmp.fullbuffer ); // Anzahl der Hochkommata (') und // Null-Terminatoren zählen. dword noEscapes = count_chars( cData, '\'', '\0' ); // Hochkommata und 0 durch Escape-Zeichen // ersetzen und in neuem Buffer speichern. char cData4MySQL[ bmp.size + noEscapes ]; replace_chars( cData4MySQL, cData, '\'', "\\'", '\0', "\\0" ); // SQL ausführen. query( "INSERT INTO myTable (myBLOB) VALUES ('%s')", cData4MySQL ); |
Alter Hase
Zitat von »"Nox"«
Dann könntest du in der Tabelle anstatt der eigentlichen Datei den Dateipfad speichern.
Alter Hase
C-/C++-Quelltext |
|
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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using MySql.Data.MySqlClient; using System.IO; namespace SqlBlob { public partial class Form1 : Form { private MySqlConnection connection_ = null; private Byte[] image_data_ = null; public Form1() { InitializeComponent(); loadImage(); openConnection(); saveImageToDatabase(); loadImageFromDatabase(); } private void loadImage() { OpenFileDialog ofd = new OpenFileDialog(); ofd.InitialDirectory = "c:\\"; ofd.Filter = "Image Files(*.bmp;*.jpg;*.gif;*.png)|*.bmp;*.jpg;*.gif;*.png|All files (*.*)|*.*"; ofd.RestoreDirectory = true; if(ofd.ShowDialog() == DialogResult.OK) { try { Bitmap bmp = new Bitmap(ofd.FileName); //also load a bytedata-copy FileStream stream = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read); image_data_ = new Byte[stream.Length]; stream.Read(image_data_, 0, image_data_.Length); stream.Close(); } catch(Exception) { MessageBox.Show("Diese Bilddatei konnte nicht geladen werden"); } } } private void openConnection() { string connection = "SERVER=localhost;DATABASE=temp;UID=root;PASSWORD=xxx"; connection_ = new MySqlConnection(connection); connection_.Open(); } private void saveImageToDatabase() { MySqlCommand cmd = new MySqlCommand("INSERT INTO test VALUES(?picture)", connection_); MySqlParameter param = new MySqlParameter("?picture", MySqlDbType.Blob, image_data_.Length, System.Data.ParameterDirection.Input, true, 0, 0, null, DataRowVersion.Current, image_data_); cmd.Parameters.Add(param); cmd.ExecuteNonQuery(); } private void loadImageFromDatabase() { Byte[] buffer = new Byte[24000]; MySqlCommand cmd = new MySqlCommand("SELECT photo FROM test", connection_); try { MySqlDataReader rd = cmd.ExecuteReader(); while(rd.Read()) { int bytes_read = (int)rd.GetBytes(0, 0, buffer, 0, 24000); //Alternativ könnte man auch die Anzahl der Bytes in der Datenbank mit //speichern, um Puffer mit der richtigen Größe zu erzeugen MemoryStream stream = new MemoryStream(buffer, 0, bytes_read, false); Bitmap bmp = new Bitmap(stream); pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; pictureBox1.Image = bmp; } } catch(Exception exc) { MessageBox.Show(exc.Message); } } } } |
Werbeanzeige