Prog.Hu
C# kép feltöltése MySQL-be picit egyszerűbben.
2013-09-05T07:12+01:00
Riha
RihaProg.Hu
regisztrált tag
Ez a kód picit összekuszálódott, ezért ha még valakit érdekelne:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.IO;
using MySql.Data.MySqlClient;
using MySql.Data.Types;

//http://google.com/codesearch/p?hl=en#f9cd8CGa5WU/MySql.Data/Tests/Source/BlobTests.cs&q=mysql%20insert%20image%20create%20table%20lang:c%23
namespace Kepek
{
    public partial class Form1 : Form
    {
        MySql.Data.MySqlClient.MySqlConnection conn;
        MySql.Data.MySqlClient.MySqlCommand cmd;
        string SQL;
        public Form1()
        {
            InitializeComponent();
            conn = new MySql.Data.MySqlClient.MySqlConnection();
            cmd = new MySql.Data.MySqlClient.MySqlCommand();
            //conn.ConnectionString = "server=127.0.0.1;uid=root;" + "pwd=mysql;database=test;";

        }

        private void button1_Click(object sender, EventArgs e)
        {
           
            //"Server=localhosr:3306;Database=Mydb;User ID=root;Password=xxxx;CharSet=utf8"
            //server=192.168.2.9;user id=kakuk;database=new_db1
            //MySqlConnection connection = new MySqlConnection(connBuilder.ConnectionString);
            conn = new MySqlConnection(ConnBild());
            MySqlCommand cmd = conn.CreateCommand();

            conn.Open();

            // Here goes the code needed to perform operations on the
            try
            {
                SQL = "INSERT INTO kepek1 VALUES(?id, ?Neve, ?wKep1, ?wKep2)";
                FileStream fs = new FileStream("D:\Beach_Plant.jpg", FileMode.Open, FileAccess.Read);
                BinaryReader br = new BinaryReader(fs);
                byte[] photo = br.ReadBytes((int)fs.Length);
                br.Close();
                fs.Close();
                cmd.CommandText = SQL;
                cmd.Parameters.AddWithValue("?id", 2);
                cmd.Parameters.AddWithValue("?Neve", "Beach_Plant");
                cmd.Parameters.AddWithValue("?wKep1", photo);
                cmd.Parameters.AddWithValue("?wKep2", photo);
                cmd.ExecuteNonQuery();

                MessageBox.Show("Image Inserted into database successfully!",
                    "Success!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            }
            catch (MySql.Data.MySqlClient.MySqlException ex)
            {
                MessageBox.Show("Error " + ex.Number + " has occurred: " + ex.Message,
                    "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
    //conn.Close();
            // database such as querying or inserting rows into a table


            conn.Close();

        }
        //http://forums.mysql.com/read.php?38,70279,70486#msg-70486 <= insert/select image
        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button2_Click(object sender, EventArgs e)
        {
           
            //"Server=localhosr:3306;Database=Mydb;User ID=root;Password=xxxx;CharSet=utf8"
            //server=192.168.2.9;user id=kakuk;database=new_db1
            //conn = new MySqlConnection(connBuilder.ConnectionString);
            conn = new MySqlConnection(ConnBild());

            MySqlCommand cmd = conn.CreateCommand();

            conn.Open();
            SQL = "SELECT Megnevezes,Kep1 FROM kepek1 WHERE Tid = 1";
            cmd.CommandText = SQL;
            MySqlDataReader reader;
            try
            {
                reader = cmd.ExecuteReader();
                if (reader.Read())
                {
                    Image wkep = null;
                    if (reader["kep1"] != DBNull.Value)
                    {
                        MemoryStream ms = new MemoryStream((byte[])reader["kep1"]);
                        wkep = Image.FromStream(ms);
                        pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
                        pictureBox1.Image = wkep;
                    }
                    string wMegnevezes = reader["Megnevezes"] as string;
                    lblKep.Text = wMegnevezes;
                    reader.Close();


                }
                else
                    reader.Close();
            }
            catch (MySql.Data.MySqlClient.MySqlException ex)
            {
                MessageBox.Show("Error " + ex.Number + " has occurred: " + ex.Message,
                    "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            conn.Close();           
        }
        public  string ConnBild()
        {
            MySqlConnectionStringBuilder connBuilder =
                new MySqlConnectionStringBuilder();
            connBuilder.Add("server", "192.168.2.9");
            connBuilder.Add("Database", "new_db1");
            //connBuilder.Add("Data Source", "localhost");
            connBuilder.Add("User Id", "kakuk");
            connBuilder.Add("Password", "kakuk");
            var connstr = connBuilder.ConnectionString;
            return connstr;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            System.Reflection.Assembly thisExe;
            thisExe = System.Reflection.Assembly.GetExecutingAssembly();
            System.IO.Stream file =
                thisExe.GetManifestResourceStream("Kepek.Beach_Plant.jpg");
            this.pictureBox1.Image = Image.FromStream(file);
           
    }
}
Mutasd a teljes hozzászólást!
hello!

Elég régen írtad ezt a hozzászólást de hátha tudnál nekem segíteni.
Igazából nem konkrétan a képfeltöltés érdekel hanem csak az hogy hogyan kell adatokat tölteni mysql-be C#-al.
Félig meddig világos, de mikor INSERT INTO-t futtatok hibát ír ki. Valami olyasmit, hogy nem egyezik az oszlopszám.
Tudnál segíteni?

előre is köszi.

üdv
Zoli


Bocsi! Közben megoldódott.

Én voltam a hülye
Mutasd a teljes hozzászólást!
Üdv. Mindenkinek!

Hasonló címmel kreált topik volt nemrég a Tudástárban, de törlődött. Az okát nem tudom, de nem is bánom a törlést mert vak vezet világtalant kinézete volt az eseménynek. Szerettem volna segíteni a kérdés feltevőnek, de MySQL-beli járatlanságom sikertelenné tette ebéli igyekezetemet. Nulla ponttal záródott a topik, talán ezért is törlődött. Nem is zavart volna, ha nem piszkált volna a sikertelenség.
Nekem a MySQL + C# fura együttes, nem tudom hol mire esélyes, ezért nem is foglalkoztam eddig véle, de most sarokba szorított a kíváncsiság. Nem kellett sokat küzdeni, MySQL server + SQL Manager Lite for MySQL letöltése, üzembehelyezése (külön gépen, hogy a távoli elérés is tesztelhető legyen).
A segéddel aránylag könnyedén kreáltam egy adatbázist, azon belül egy táblát:

CREATE TABLE `kepek1` (
  `Tid` int(11) NOT NULL,
  `Megnevezes` char(40) default NULL,
  `Kep1` mediumblob,
  `Kep2` longblob,
  PRIMARY KEY  (`Tid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Majd egy usert a megfelelő jogokkal, a többi már a C# kenyere volt.

C#-hoz mysql-connector-net-6.0.3 install, és jöhetett a kreálás.
Eredetileg csupán a kép beolvasása és táblába insert-álása volt a feladat, de kibővítettem egy visszaolvasással és megjelenítéssel.
Bocsi, a vérbeli C#-osoktól a laza formáért.
a kód:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.IO;
using MySql.Data.MySqlClient;
using MySql.Data.Types;

//http://google.com/codesearch/p?hl=en#f9cd8CGa5WU/MySql.Data/Tests/Source/BlobTests.cs&q=mysql%20insert%20image%20create%20table%20lang:c%23
namespace Kepek
{
    public partial class Form1 : Form
    {
        MySql.Data.MySqlClient.MySqlConnection conn;
        MySql.Data.MySqlClient.MySqlCommand cmd;
        string SQL;
        public Form1()
        {
            InitializeComponent();
            conn = new MySql.Data.MySqlClient.MySqlConnection();
            cmd = new MySql.Data.MySqlClient.MySqlCommand();
           
        }

        private void button1_Click(object sender, EventArgs e)
        {
            conn = new MySqlConnection(ConnBild());
            MySqlCommand cmd = conn.CreateCommand();

            conn.Open();

            try
            {
                SQL = "INSERT INTO kepek1 VALUES(?id, ?Neve, ?wKep1, ?wKep2)";
                FileStream fs = new FileStream("D:\\Beach_Plant.jpg", FileMode.Open, FileAccess.Read);
                BinaryReader br = new BinaryReader(fs);
                byte[] photo = br.ReadBytes((int)fs.Length);
                br.Close();
                fs.Close();
                cmd.CommandText = SQL;
                cmd.Parameters.AddWithValue("?id", 2);
                cmd.Parameters.AddWithValue("?Neve", "Beach_Plant");
                cmd.Parameters.AddWithValue("?wKep1", photo);
                cmd.Parameters.AddWithValue("?wKep2", photo);
                cmd.ExecuteNonQuery();

                MessageBox.Show("Image Inserted into database successfully!",
                    "Success!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            }
            catch (MySql.Data.MySqlClient.MySqlException ex)
            {
                MessageBox.Show("Error " + ex.Number + " has occurred: " + ex.Message,
                    "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            conn.Close();

        }
        //http://forums.mysql.com/read.php?38,70279,70486#msg-70486 <= insert/select image
        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button2_Click(object sender, EventArgs e)
        {

            conn = new MySqlConnection(ConnBild());

            MySqlCommand cmd = conn.CreateCommand();

            conn.Open();
            SQL = "SELECT Megnevezes,Kep1 FROM kepek1 WHERE Tid = 1";
            cmd.CommandText = SQL;
            MySqlDataReader reader;
            try
            {
                reader = cmd.ExecuteReader();
                if (reader.Read())
                {
                    Image wkep = null;
                    if (reader["kep1"] != DBNull.Value)
                    {
                        MemoryStream ms = new MemoryStream((byte[])reader["kep1"]);
                        wkep = Image.FromStream(ms);
                        pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
                        pictureBox1.Image = wkep;
                    }
                    string wMegnevezes = reader["Megnevezes"] as string;
                    lblKep.Text = wMegnevezes;
                    reader.Close();


                }
                else
                    reader.Close();
            }
            catch (MySql.Data.MySqlClient.MySqlException ex)
            {
                MessageBox.Show("Error " + ex.Number + " has occurred: " + ex.Message,
                    "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            conn.Close();           
        }
        public  string ConnBild()
        {
            MySqlConnectionStringBuilder connBuilder =
                new MySqlConnectionStringBuilder();
            connBuilder.Add("server", "999.999.999.9");
            connBuilder.Add("Database", "new_db1");
            connBuilder.Add("User Id", "kakukk");
            connBuilder.Add("Password", "kakkuk");
            var connstr = connBuilder.ConnectionString;
            return connstr;
        }
    }
}

Bizakodom, hogy mást is érdekel e téma, ezért merészkedtem közreadni e néhány sort. Bocs, ha tévednék..
Mutasd a teljes hozzászólást!
Csatolt állomány
Oszd meg másokkal is!