Не получается занести байтовый массив в mysql в поле типа BLOB

151
06 июля 2019, 22:20

пытаюсь занести изображение с помощью следующего кода:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
 namespace CosmeticsShop
 {
 public partial class AddProducts : Form
{
    public AddProducts()
    {
        InitializeComponent();
    }
    private void AddProducts_Load(object sender, EventArgs e)
    {
        MySqlConnection mysqlconn;
        try
        {
            MySqlConnectionStringBuilder msql = new MySqlConnectionStringBuilder();
            msql.Server = "localhost";
            msql.UserID = "root";
            msql.Password = "";
            msql.Database = "shopcosm";
            msql.Port = 3306;
            msql.ConvertZeroDateTime = true;
            msql.SslMode = MySqlSslMode.None;
            using (mysqlconn = new MySqlConnection(msql.ConnectionString))
            {
                mysqlconn.Open();
                var query = "SELECT NameCategory FROM category";
                using (var command = new MySqlCommand(query, mysqlconn))
                {
                    using (var reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            comboBox1.Items.Add(reader.GetString("NameCategory"));
                        }
                    }
                }
                mysqlconn.Close();
            }
        }
        catch (MySqlException ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }
    private void button2_Click(object sender, EventArgs e)
    {
        Close();
    }
    private void button1_Click(object sender, EventArgs e)
    {
        MySqlCommand sqlCommand = new MySqlCommand();
        try
        {
            if (textBox1.Text != "" && comboBox1.Text != "" && textBox3.Text != "" && textBox4.Text != "")
            {
                MySqlConnectionStringBuilder msql = new MySqlConnectionStringBuilder();
                msql.Server = "localhost";
                msql.UserID = "root";
                msql.Password = "";
                msql.Database = "shopcosm";
                msql.Port = 3306;
                msql.SslMode = MySqlSslMode.None;
                MySqlConnection connection = new MySqlConnection(msql.ConnectionString);
                MemoryStream ms = new MemoryStream();
                pictureBox1.Image.Save(ms, pictureBox1.Image.RawFormat);
                byte[] image = ms.ToArray();
                string zapros = "INSERT INTO tovars(idCategory,Size,Color,Price,Image) VALUES ((SELECT idCategory FROM category WHERE NameCategory='" + comboBox1.Text + "'),'" + textBox1.Text + "','" + textBox3.Text + "','" + textBox4.Text + "','@imgp')";
                connection.Open();
                sqlCommand.Parameters.Add("@imgp", MySqlDbType.Blob);
                if (image == null) { } else { sqlCommand.Parameters["@imgp"].Value = image; }
                sqlCommand = new MySqlCommand(zapros, connection);
                if (sqlCommand.ExecuteNonQuery() == 1)
                {
                    MessageBox.Show("Данные успешно внесены!", "Информация", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    Close();
                }
                else if (sqlCommand.ExecuteNonQuery() == 0)
                {
                    MessageBox.Show("Ошибка", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    Close();
                }
                else { }
                connection.Close();
            }
            else
            {
                MessageBox.Show("Заполните все поля и попробуйте еще раз", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        catch (MySqlException ex)
        {
            MessageBox.Show(ex.ToString(), "Ошибка", MessageBoxButtons.OK);
        }

    }
    private void button3_Click(object sender, EventArgs e)
    {
        OpenFileDialog opf = new OpenFileDialog();
        opf.Filter = "Выберите изображение(*.jpg; *.png; *.gif)|*.jpg; *.png; *.gif";
        if (opf.ShowDialog() == DialogResult.OK)
        {
            pictureBox1.Image = Image.FromFile(opf.FileName);
        }
        else { }
    }
}

} Но в итоге заносится в значение просто @imgp, хотя при отладке у нас байтовый массив заполняется нормально.

Answer 1

Вдруг кому будет интересно как я решил эту пагубную затею то вот измененный код

using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Store_Cloth
{
public partial class AddProduct : Form
{
    public string pathImage { get; private set; }
    MySqlConnectionStringBuilder mySqlConnectionStringBuilder = new 
 MySqlConnectionStringBuilder();
    MySqlConnection connection;
    public AddProduct()
    {
        InitializeComponent();
    }
    private void button1_Click(object sender, EventArgs e)
    {
        try
        {
            if (true)
            {
                mySqlConnectionStringBuilder.Server = "localhost";
                mySqlConnectionStringBuilder.UserID = "root";
                mySqlConnectionStringBuilder.Password = "";
                mySqlConnectionStringBuilder.Database = "clothing_store";
                mySqlConnectionStringBuilder.Port = 3306;
                mySqlConnectionStringBuilder.SslMode = MySqlSslMode.None;
                connection = new MySqlConnection(mySqlConnectionStringBuilder.ConnectionString);
                MemoryStream ms = new MemoryStream();
                pictureBox1.Image.Save(ms, pictureBox1.Image.RawFormat);
                byte[] image = ms.ToArray();
                string query = "INSERT INTO tableofcloth(idCategory,Size,NameCloth,Color,Price,ImageT) VALUES ((SELECT idCategory FROM category WHERE NameCategory='" + comboBox1.Text + "'),'" + textBox1.Text + "','" + textBox3.Text + "','" + textBox4.Text + "','" + textBox2.Text + "',@imgp)";
                connection.Open();
                MySqlCommand sqlCommand = new MySqlCommand(query, connection);
                sqlCommand.Parameters.Add(new MySqlParameter("@imgp", MySqlDbType.Blob)).Value = image;
                if (sqlCommand.ExecuteNonQuery() == 1)
                {
                    MessageBox.Show("Данные успешно внесены!", "Информация", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    Close();
                }
                else if (sqlCommand.ExecuteNonQuery() == 0)
                {
                    MessageBox.Show("Ошибка", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    Close();
                }
                else { }
                connection.Close();
            }
            else
            {
                MessageBox.Show("Заполните все поля и попробуйте еще раз", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        catch (MySqlException ex)
        {
            MessageBox.Show(ex.ToString(), "Ошибка", MessageBoxButtons.OK);
        }
    }
    private void button3_Click(object sender, EventArgs e)
    {
        OpenFileDialog opf = new OpenFileDialog();
        opf.Filter = "Выберите изображение(*.jpg; *.png; *.gif)|*.jpg; *.png; *.gif";
        if (opf.ShowDialog() == DialogResult.OK)
        {
            pictureBox1.Image = Image.FromFile(opf.FileName);
        }
    }
    private void AddProduct_Load(object sender, EventArgs e)
    {
        MySqlConnection mysqlconn;
        try
        {
            MySqlConnectionStringBuilder msql = new MySqlConnectionStringBuilder();
            msql.Server = "localhost";
            msql.UserID = "root";
            msql.Password = "";
            msql.Database = "clothing_store";
            msql.Port = 3306;
            msql.ConvertZeroDateTime = true;
            msql.SslMode = MySqlSslMode.None;
            using (mysqlconn = new MySqlConnection(msql.ConnectionString))
            {
                mysqlconn.Open();
                var query = "SELECT NameCategory FROM category";
                using (var command = new MySqlCommand(query, mysqlconn))
                {
                    using (var reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            comboBox1.Items.Add(reader.GetString("NameCategory"));
                        }
                    }
                }
                mysqlconn.Close();
            }
        }
        catch (MySqlException ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }
}

} Всем спасибо кто откликнулся и предлагал свои варианты решения данной проблемы!

READ ALSO
C# .Net Framework portable установка

C# .Net Framework portable установка

Можно ли установитьNet Framework без установщика от Microsoft а своими руками? Копированием и т

130
C# и PostgreSQL. Разработка под WinXP. о0

C# и PostgreSQL. Разработка под WinXP. о0

Какой более свежий PostgreSQL и библиотека Npgsql для него, которые могли бы работать и на WinXP SP2 с Net Framework 20 и на Win7,8,10? или как поступить в таком случае?

148
Разница между типами var и object в c#

Разница между типами var и object в c#

Доброго времени суток!

138