Здравствуйте! Сегодня: Чт, 22 Окт 2020, Ваш IP: 3.210.201.170 Войти через loginza
 
Вход | Регистрация | Забыли пароль?
Мой Kbyte.Ru
> Список форумов Kbyte.Ru - - Базы данных
+ Создать новую тему Страница: 1
Тема: Картинка в БД и из DataGridа в Picturebox · +  +  дата добавления: 14.02.2012 / 12:15
Автор темы:
FooX
FooX
тем: 1 / ответов: 4 / благодарностей: 0 / репутация: 0
ответов: 4
создал(а) тем: 1


Создаю базу данных и одной из форм я добавляю картинку в PictureBox
С кодом:

private void button3_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = "JPEG Images|*.jpg|GIF Images|*.gif|BITMAPS|*.bmp|All|*.*";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
String sFileName = openFileDialog1.FileName;
pictureBox1.Image = Image.FromFile(sFileName);
}
}
как сделать штаб эту картинку сохранили в базе?
а патом показывали ее когда в DateGridе вазму эту запись , а когда другую запись там уже показавали бы уже другую картинку.
добавляю вес код 2 форм
1. Вод:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace FilmaiDB2
{
    public partial class Naujas_filmas : Form
    {
        public Naujas_filmas()
        {
            InitializeComponent();
        }
        private void Naujas_filmas_Load(object sender, EventArgs e)
        {
            this.fILMAITableAdapter.Fill(this.filmaiDB_DATA.FILMAI);
        }
        //Вод
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                this.fILMAITableAdapter.Insert(KodasTextBox.Text, OfPavTextBox.Text, LTPavTextBox.Text, ZanrasTextBox.Text, DateTime.Parse(LeidimoMetaiTextBox.Text), short.Parse(TrukmeTextBox.Text),pictureBox1.Image);
                this.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Klaida įvedant filmą.\n\nDetalesnė informacija:" + ex.Message, "Klaida", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        private void button3_Click(object sender, EventArgs e)
        {
            openFileDialog1.Filter = "JPEG Images|*.jpg|GIF Images|*.gif|BITMAPS|*.bmp|All|*.*";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                String sFileName = openFileDialog1.FileName;
                pictureBox1.Image = Image.FromFile(sFileName);
            }
        }
    }
}

2.Редактироват/удалит
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace FilmaiDB2
{
    public partial class Filmai : Form
    {
        public Filmai()
        {
            InitializeComponent();
            dataGridView1.SelectionChanged += new EventHandler(dataGridView1_SelectionChanged);
        }
        //----------------------------------------------
        private void Filmai_Load(object sender, EventArgs e)
        {
            this.fILMAITableAdapter.Fill(this.filmaiDB_DATA.FILMAI);
        }
        void dataGridView1_SelectionChanged(object sender, EventArgs e)
        {
            // Заполнейт текс бокс
            if (dataGridView1.SelectedRows.Count > 0)
            {
                try
                {
                    string kodas = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
                    FilmaiDB_DATA.FILMAIRow row = this.filmaiDB_DATA.FILMAI.FindByFILMO_KODAS(kodas);

                    KodasTextBox.Text = row.FILMO_KODAS;
                    OficialusPavTextBox.Text = row.OFICIALUS_PAVADINIMAS;
                    LTPavTextBox.Text = row.LIETUVISKAS_PAVADINIMAS;
                    ZanrasTextBox.Text = row.ZANRAS;
                    LeidimoMetaiTextBox.Text = row.LEIDIMO_METAI.ToShortDateString();
                    TrukmeTextBox.Text = row.TRUKME.ToString(); ;
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Klaida gaunant duomenis.\n\nDetalesnė informacija: " + ex.Message, "Klaida", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
            {
                KodasTextBox.Clear();
                OficialusPavTextBox.Clear();
                LTPavTextBox.Clear();
                ZanrasTextBox.Clear();
                LeidimoMetaiTextBox.Clear();
                TrukmeTextBox.Clear();
            }
        }
        //Удалит
        private void button2_Click(object sender, EventArgs e)
        {
            if (dataGridView1.SelectedRows.Count > 0)
            {
                try
                {
                    string kodas = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
                    FilmaiDB_DATA.FILMAIRow row = this.filmaiDB_DATA.FILMAI.FindByFILMO_KODAS(kodas);
                    this.fILMAITableAdapter.Delete(KodasTextBox.Text, OficialusPavTextBox.Text, LTPavTextBox.Text, ZanrasTextBox.Text, DateTime.Parse(LeidimoMetaiTextBox.Text), short.Parse(TrukmeTextBox.Text));
                    this.fILMAITableAdapter.Fill(this.filmaiDB_DATA.FILMAI);
                    MessageBox.Show("Filmas ištrintas sėkmingai");
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Klaida trinant filmą.\n\nDetalesnė informacija: " + ex.Message, "Klaida", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
        //Сохранит изменения
        private void button1_Click(object sender, EventArgs e)
        {
            if (dataGridView1.SelectedRows.Count > 0)
            {
                try
                {
                    string kodas = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
                    FilmaiDB_DATA.FILMAIRow row = this.filmaiDB_DATA.FILMAI.FindByFILMO_KODAS(kodas);
                    row.OFICIALUS_PAVADINIMAS = OficialusPavTextBox.Text;
                    row.LIETUVISKAS_PAVADINIMAS = LTPavTextBox.Text;
                    row.ZANRAS = ZanrasTextBox.Text;
                    row.LEIDIMO_METAI = DateTime.Parse(LeidimoMetaiTextBox.Text);
                    row.TRUKME = short.Parse(TrukmeTextBox.Text);
                    this.fILMAITableAdapter.Update(row);
                    MessageBox.Show("Pakeitimai išsaugoti sėkmingai");
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Pakeitimai neišsaugoti.\n\nDetalesnė informacija:" + ex.Message, "Klaida", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
    }
}
в БД Oracle создал таблицу
"NUOTRAULA" BLOB NOT NULL);
ради картинки
тока вот как ее там засунут я не знаю помогите если можете.
фото как выгледит формы:
картинка
што вам еше над? штоб памоч мне?
Если возможна так хоть с вдовам данных помогите уж удалит и редактировать сам сделаю
я очини прошу подскажите как. Либо мой код отредактируйте совсем супер будет

либо как сделат штоб при нажатие кнопки фаил сохранился указанам месте
а дб берет тока линк к етаму фаилу

ну ета што луче и што легче буду раз если помагите
Технологии: C#, Oracle
 
Ответ # 1 # · +  +  дата добавления: 14.02.2012 / 12:42
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Картинки лучше в базе не хранить, это может негативно отразиться на производительности, когда данных будет много.

Если сохранять ссылку на выбранную картинку, то при выборе файла картинки нужно запомнить путь к файлу. Для этого можно использовать, например, свойство Tag, которые есть у всех элементов управления.
private void button3_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = "JPEG Images|*.jpg|GIF Images|*.gif|BITMAPS|*.bmp|All|*.*";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
String sFileName = openFileDialog1.FileName;
pictureBox1.Image = Image.FromFile(sFileName);
pictureBox1.Tag = sFileName;//запоминаем путь к файлу картинки
}
}

Соответственно, при сохранении данных нужно записывать в бузу путь к файлу из свойства Tag.
  //Сохранить изменения
  private void button1_Click(object sender, EventArgs e)
  {
   if (dataGridView1.SelectedRows.Count > 0)
   {
    try
    {
     string kodas = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
     FilmaiDB_DATA.FILMAIRow row = this.filmaiDB_DATA.FILMAI.FindByFILMO_KODAS(kodas);
     row.OFICIALUS_PAVADINIMAS = OficialusPavTextBox.Text;
     row.LIETUVISKAS_PAVADINIMAS = LTPavTextBox.Text;
     row.ZANRAS = ZanrasTextBox.Text;
     row.LEIDIMO_METAI = DateTime.Parse(LeidimoMetaiTextBox.Text);
     row.TRUKME = short.Parse(TrukmeTextBox.Text);
     row.KARTINKA = pictureBox1.Tag.ToString(); // в таблице должно быть текстовое поле с именем KARTINKA
     this.fILMAITableAdapter.Update(row);
     MessageBox.Show("Pakeitimai išsaugoti sėkmingai");
    }
    catch (Exception ex)
    {
     MessageBox.Show("Pakeitimai neišsaugoti.\n\nDetalesnė informacija:" + ex.Message, "Klaida", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
   }
  }
Загрузка данных:
  void dataGridView1_SelectionChanged(object sender, EventArgs e)
  {
   // Заполнение текст бокс
   if (dataGridView1.SelectedRows.Count > 0)
   {
    try
    {
     string kodas = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
     FilmaiDB_DATA.FILMAIRow row = this.filmaiDB_DATA.FILMAI.FindByFILMO_KODAS(kodas);

     KodasTextBox.Text = row.FILMO_KODAS;
     OficialusPavTextBox.Text = row.OFICIALUS_PAVADINIMAS;
     LTPavTextBox.Text = row.LIETUVISKAS_PAVADINIMAS;
     ZanrasTextBox.Text = row.ZANRAS;
     LeidimoMetaiTextBox.Text = row.LEIDIMO_METAI.ToShortDateString();
     TrukmeTextBox.Text = row.TRUKME.ToString();

     // если в поле KARTINKA не будет данных, то при попытке загрузить картинку произойдет ошибка
     // необходимо проверять наличие данных в поле KARTINKA (в этом примере код проверки закомментирован - данные не проверяются)
     //if(row.KARTINKA != DBNull.Value && !String.IsNullOrEmpty(row.KARTINKA.ToString())){
     pictureBox1.Image = Image.FromFile(row.KARTINKA.ToString()); // путь к картинке находится в текстовом поле с именем KARTINKA
     pictureBox1.Tag = row.KARTINKA;//запоминаем путь к файлу картинки, чтобы можно было сохранить изменения
     //}
    }
    catch (Exception ex)
    {
     MessageBox.Show("Klaida gaunant duomenis.\n\nDetalesnė informacija: " + ex.Message, "Klaida", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
   }
   else
   {
    KodasTextBox.Clear();
    OficialusPavTextBox.Clear();
    LTPavTextBox.Clear();
    ZanrasTextBox.Clear();
    LeidimoMetaiTextBox.Clear();
    TrukmeTextBox.Clear();
   }
  }
Путь к картинке может быть относительным (относительно корневого каталога программы).


Если все же требуется сохранять саму картинку в базу, то для этого нужно использовать поле соответствующего типа. С Oracle я не знаком, но наверное нужно использовать поле типа BFILE, или CLOB/NCLOB. CLOB/NCLOB - если сохранять картинки в текстовом виде, преобразованные в Base64. Что касается BFILE, то я полагаю, в C# это будет массив байт. Загрузить (поместить в PictureBox) картинку из массива байт (и базы, из поля BFILE) можно через функцию Image.FromStream.
pictureBox1.Image = Image.FromStream(New System.IO.MemoryStream(row.KARTINKA_BFILE));
Сохранить в базу в виде массива байт:
//row.KARTINKA_BFILE = System.IO.File.ReadAllBytes("C:\полный путь к файлу картинки");
row.KARTINKA_BFILE = System.IO.File.ReadAllBytes(pictureBox1.Tag.ToString()); // это самый простой вариант

// но вообще, картинка уже есть в памяти и ее можно прямо из PictureBox записать в массив байт
MemoryStream m = new MemoryStream();
pictureBox1.Image.Save(m, System.Drawing.Imaging.ImageFormat.Png); //сохранили картинку в формате png в MemoryStream
row.KARTINKA_BFILE = m.ToArray(); // преобразуем MemoryStream в массив байт
 
Ответ # 2 # · +  +  дата добавления: 14.02.2012 / 18:48
Автор ответа:
FooX
FooX
тем: 1 / ответов: 4 / благодарностей: 0 / репутация: 0
ответов: 4
создал(а) тем: 1


Вот спс еше 1 вапрос как сделат так штоб при кнопке сохранит даны
картинка из 1 каталога переместился в другой?
тоесть например у меня была картинка C://ProgramsFile/pictures
а я хочю все картинка сохранят вадном месте например D://PictureBaza
как мне изминит где будет сохраняца картинки?
 
Ответ # 3 # · +  +  дата добавления: 14.02.2012 / 19:29
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


Переместить файл можно так:
System.IO.File.Move(@"C:\Старый файл.jpg", @"D:\Новый файл.jpg");
Копировать:
System.IO.File.Copy(@"C:\Источник.jpg", @"D:\Копия.jpg");
либо через FileInfo:
System.IO.FileInfo FI = new System.IO.FileInfo(@"C:\файл.jpg");
//FI.MoveTo(@"D:\новый файл.jpg");
//FI.CopyTo(@"D:\копия.jpg");
См. также Работа с файлами в C#
 
Ответ # 4 # · +  +  дата добавления: 14.02.2012 / 21:44
Автор ответа:
FooX
FooX
тем: 1 / ответов: 4 / благодарностей: 0 / репутация: 0
ответов: 4
создал(а) тем: 1


А мне Tаg ставит на кнопки или на форму картинки?
 
Ответ # 5 # · +  +  дата добавления: 15.02.2012 / 02:32
Автор ответа:
FooX
FooX
тем: 1 / ответов: 4 / благодарностей: 0 / репутация: 0
ответов: 4
создал(а) тем: 1


Еррор
:System.Drawing.Bitmap
на
pictureBox2.Image = Image.FromFile(row.NUOTRAULA.ToString());
почиму и как его изправит?
 
Ответ # 6 # · +  +  дата добавления: 15.02.2012 / 11:34
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


А мне Tаg ставит на кнопки или на форму картинки?
Логичней на PictureBox, но вообще без разницы, можно и отдельную переменную для этого использовать.
Еррор
:System.Drawing.Bitmap
Без полного текста ошибки что-либо сказать будет сложно, ибо вариантов ошибок больше чем звезд на небе
pictureBox2.Image = Image.FromFile(row.NUOTRAULA.ToString());
Если ты проигнорировал мой комментарий с условием проверки наличия данных в поле, содержащем путь к файлу картинки, то ошибка может быть из-за отсутствия данных в этом поле.

Также, желательно проверять существование файла, перед загрузкой:
if(row.NUOTRAULA != DBNull.Value && !String.IsNullOrEmpty(row.NUOTRAULA.ToString()) && File.Exists(row.NUOTRAULA.ToString())){
  pictureBox2.Image = Image.FromFile(row.NUOTRAULA.ToString());
}
 
Ответ # 7 # · +  +  дата добавления: 15.02.2012 / 14:17
Автор ответа:
FooX
FooX
тем: 1 / ответов: 4 / благодарностей: 0 / репутация: 0
ответов: 4
создал(а) тем: 1


А если без тагов ета все делат?
как тогда код будет выгледит?
 
Ответ # 8 # · +  +  дата добавления: 15.02.2012 / 14:23
Автор ответа:
Алексей Немиро
Алексей Немиро
тем: 534 / ответов: 5130 / благодарностей: 325 / репутация: 211
Чашка Kbyte.Ru>>
Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 5130
создал(а) тем: 534


А если без тагов ета все делат?
как тогда код будет выгледит?
Будет выглядеть практически также, только вместо Tag будет имя переменной
Смысл в том, что нужно запоминать имя выбранного файла. Можно вообще брать имя напрямую из openFileDialog1.FileName и записывать в базу. Окончательное решение будет зависеть от особенностей задачи.
 
Страница: 1 + Создать новую тему