powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / sqlCommand на вставку изображения в нужную ячейку
13 сообщений из 13, страница 1 из 1
sqlCommand на вставку изображения в нужную ячейку
    #38962736
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не получается вставить изображение в БД.
Вставляется либо новая строка с изображением либо не срабатывает update для datagridview
Вот так делаю:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
private void button1_Click(object sender, EventArgs e)
        {
            SqlConnection sqlConnection = new SqlConnection(ConnectionString);
            SqlCommand sqlCommand = new SqlCommand("INSERT INTO Tab1 ( Image ) VALUES ( @img )", sqlConnection);
            SqlParameter sqlParameter = new SqlParameter("@img", SqlDbType.VarBinary);
            if (OpenImageFileDialog.ShowDialog() == DialogResult.OK)
            {
            Image Image = Image.FromFile(OpenImageFileDialog.FileName);
            MemoryStream memoryStream = new MemoryStream();
            Image.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Jpeg);
            sqlParameter.Value = memoryStream.ToArray();
            sqlCommand.Parameters.Add(sqlParameter);
            sqlConnection.Open();
            sqlCommand.ExecuteNonQuery();
            sqlConnection.Close();
            memoryStream.Dispose();
            }
        }


и вот так пробую:
Код: c#
1.
2.
3.
4.
5.
                Image Image = Image.FromFile(OpenImageFileDialog.FileName);
                MemoryStream memoryStream = new MemoryStream();
                Image.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Jpeg);
                dGV_Eq.Rows[SelectedRowNow].Cells[16].Value = memoryStream.ToArray();
                memoryStream.Dispose();


но так не срабатывает update
...
Рейтинг: 0 / 0
sqlCommand на вставку изображения в нужную ячейку
    #38962852
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по вашему dGV_Eq.Rows[SelectedRowNow].Cells[16].Value = memoryStream.ToArray();
должен обновить значение в бд?
...
Рейтинг: 0 / 0
sqlCommand на вставку изображения в нужную ячейку
    #38963036
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нет конечно. обновление идет отдельно на кнопке
Код: c#
1.
dataAdapterEq.Update((DataTable)bsEq.DataSource);
...
Рейтинг: 0 / 0
sqlCommand на вставку изображения в нужную ячейку
    #38963057
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дело в том с обычной текстовой ячейкой все проходит без вопросов.
Код: c#
1.
2.
3.
4.
5.
dGV_Eq.CurrentCell = dGV_Eq.Rows[SelectedRowNow].Cells[19];
dGV_Eq.EditMode = DataGridViewEditMode.EditProgrammatically;
dGV_Eq.BeginEdit(true);
dGV_Eq.Rows[SelectedRowNow].Cells[19].Value = "123";
dGV_Eq.EndEdit();



и удаляем

Код: c#
1.
2.
3.
4.
5.
dGV_Eq.CurrentCell = dGV_Eq.Rows[SelectedRowNow].Cells[19];
dGV_Eq.EditMode = DataGridViewEditMode.EditProgrammatically;
dGV_Eq.BeginEdit(true);
dGV_Eq.Rows[SelectedRowNow].Cells[19].Value = null;
dGV_Eq.EndEdit();



Может что лишнее пишу, но главное работает
А вот когда ячейка с картинкой:
Код: c#
1.
dGV_Eq.Rows[SelectedRowNow].Cells[16].Value = memoryStream.ToArray();


и последующее
Код: c#
1.
dGV_Eq.Rows[SelectedRowNow].Cells[16].Value = null;


не прокатывает.
Но записывается так:
тыкаю дважды на ячейке куда загружается картинка. Затем жму кнопку где вышеприведенный код. Затем опять два раза тыкаю на той же ячейке и еще раз выбираю файл по кнопке. И только тогда уже картинка "записывается" в ячейку. Ну и потом апдейт. Сохраняется.
...
Рейтинг: 0 / 0
sqlCommand на вставку изображения в нужную ячейку
    #38963153
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а для dataAdapterEq.Update ты написал UpdateCommand с параметрами?
имхо сделай простой crud repo, заодно код станет приятнее, чище, котролируеме. Твой UI будет валидировать и создавать модель которую репо уложит в бд, неужели нравится работать с нетипизированым представлениями
...
Рейтинг: 0 / 0
sqlCommand на вставку изображения в нужную ячейку
    #38963586
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Update у меня такой:

Код: c#
1.
dataAdapterTab.Update((DataTable)bindingSourceTab.DataSource);
...
Рейтинг: 0 / 0
sqlCommand на вставку изображения в нужную ячейку
    #38963633
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
тут я спрашивал как мне сделать update
вроде получилось, может не совсем красиво и правильно... но пока не до красоты.

В любом случае буду признателен за правильное направление
...
Рейтинг: 0 / 0
sqlCommand на вставку изображения в нужную ячейку
    #38963651
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ashoorup,
не спрашивал ты там как сделать update.
я же тебе написал что сделать надо
handmadeFromRu а для dataAdapterEq.Update ты написал UpdateCommand с параметрами?

прописать UpdateCommand твоему адаптеру. метод Update обновляет только в гриде если не указана еще UpdateCommand для бд

п.с. если хочешь по хорошему и с полным контролем то делай репозиторий для сущности, адаптеры прошлый век и убогое не типизированное гавно барахло
...
Рейтинг: 0 / 0
sqlCommand на вставку изображения в нужную ячейку
    #38963818
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еслиб я еще знал как...
Прошу помощи в данном вопросе! Если не сложно ткните носом что почитать, какие примеры посмотреть.
...
Рейтинг: 0 / 0
sqlCommand на вставку изображения в нужную ячейку
    #38963835
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по адаптеру
http://stackoverflow.com/questions/6833277/
http://www.cyberforum.ru/ado-net/thread42204.html

п.с. ну ты ж сам мог загулить простой запрос в гугле
так
или так
так
...
Рейтинг: 0 / 0
sqlCommand на вставку изображения в нужную ячейку
    #38964056
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я сделал так:
Код: c#
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.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
public partial class MainForm : Form
    {
        static string ConnectionString = @"Data Source=" + Properties.Settings.Default.SettConnServerIP +
                                               "; User=" + Properties.Settings.Default.SettConnUser +
                                           "; Password=" + Properties.Settings.Default.SettConnPass +
                                     ";Initial Catalog=" + Properties.Settings.Default.SettConnDataBase;
        
        private BindingSource  bsEq = new BindingSource();
        private BindingSource  bsMan = new BindingSource();
        private BindingSource  bsManFilter = new BindingSource();
        private BindingSource  bsMesUn = new BindingSource();

        private SqlDataAdapter dAEq = new SqlDataAdapter();
        private SqlDataAdapter dAMan = new SqlDataAdapter();
        private SqlDataAdapter dAManFilter = new SqlDataAdapter();
        private SqlDataAdapter dAMesUn = new SqlDataAdapter();
public MainForm()
        {
            InitializeComponent();        
        }
private void MainForm_Load(object sender, EventArgs e)
        {
            dGV_Eq.DataSource = bsEq;
            string sqlSelect = @"SELECT 
                                 ID_Equipment, 
                                 User_equipment, 
                                 ID_Section, 
                                 Equipment_name, 
                                 Model_type, 
                                 Model_notation, 
                                 Model_standart_number, 
                                 Indicator, 
                                 ID_Manufacturer, 
                                 ID_Measure_unit, 
                                 Weight, 
                                 Dimension,
                                 Discontinued,
                                 Image,
                                 Image_shema,
                                 Equipment_description,
                                 Equipment_note
                               FROM Equipment_catalogue";
            GetData(sqlSelect);

// Далее идут настройки отображения столбцов
// Вот отрывок:
            DataGridViewComboBoxColumn ManufComboBoxColumn = new DataGridViewComboBoxColumn();
            ManufComboBoxColumn.DataPropertyName = dGV_Eq.Columns[8].DataPropertyName;
            ManufComboBoxColumn.DataSource = bsMan;
            ManufComboBoxColumn.ValueMember = "ID_Manufacturer";
            ManufComboBoxColumn.DisplayMember = "Manufacturer_name";
            ManufComboBoxColumn.AutoComplete = true;
            ManufComboBoxColumn.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox;
            ManufComboBoxColumn.FlatStyle = FlatStyle.Flat;
            dGV_Eq.Columns.Insert(8, ManufComboBoxColumn);
            dGV_Eq.Columns[8].Width = 210;
            dGV_Eq.Columns[8].HeaderText = "Завод-изготовитель";
            dGV_Eq.Columns[8].SortMode = DataGridViewColumnSortMode.Automatic;
            dGV_Eq.Columns[9].Visible = false; //копия завод-изготовитель

            comboBoxFilterID_Manufacturer.DataSource = bsManFilter;
            comboBoxFilterID_Manufacturer.ValueMember = "ID_Manufacturer";
            comboBoxFilterID_Manufacturer.DisplayMember = "Manufacturer_name";
            comboBoxFilterID_Manufacturer.Text = "";

            DataGridViewComboBoxColumn MesUnComboBoxColumn = new DataGridViewComboBoxColumn();
            MesUnComboBoxColumn.DataPropertyName = dGV_Eq.Columns[10].DataPropertyName;
            MesUnComboBoxColumn.DataSource = bsMesUn;
            MesUnComboBoxColumn.ValueMember = "ID_Measure_unit";
            MesUnComboBoxColumn.DisplayMember = "Measure_unit_name";
            MesUnComboBoxColumn.AutoComplete = true;
            MesUnComboBoxColumn.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox;
            MesUnComboBoxColumn.FlatStyle = FlatStyle.Flat;
            dGV_Eq.Columns.Insert(10, MesUnComboBoxColumn);
            dGV_Eq.Columns[10].Width = 90;
            dGV_Eq.Columns[10].HeaderText = "Ед. изм.";
            dGV_Eq.Columns[10].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dGV_Eq.Columns[10].SortMode = DataGridViewColumnSortMode.Automatic;
            dGV_Eq.Columns[11].Visible = false; //копия Ед. изм.
// Возможно неправильно делаю и в реальности лишний костыль со скрыванием "копии" поля

private void GetData(string selectCommand) 
        {
            try
            {
                dAEq    = new SqlDataAdapter(selectCommand, ConnectionString);
                dAMan   = new SqlDataAdapter("SELECT * FROM Manufactures", ConnectionString);
                dAManFilter = new SqlDataAdapter("SELECT * FROM Manufactures", ConnectionString);
                dAMesUn = new SqlDataAdapter("SELECT * FROM Measure_units", ConnectionString);
                SqlCommandBuilder EqCommandBuilder    = new SqlCommandBuilder(dAEq);
                SqlCommandBuilder ManCommandBuilder   = new SqlCommandBuilder(dAMan);
                SqlCommandBuilder ManCommandBuilderFilter = new SqlCommandBuilder(dAManFilter);
                SqlCommandBuilder MesUnCommandBuilder = new SqlCommandBuilder(dAMesUn);
                DataTable EqTable    = new DataTable();
                DataTable ManTable   = new DataTable();
                DataTable ManTableFilter = new DataTable();
                DataTable MesUnTable = new DataTable();
                dAEq.Fill(EqTable);
                dAMan.Fill(ManTable);
                dAManFilter.Fill(ManTableFilter);
                dAMesUn.Fill(MesUnTable);
                bsEq.DataSource = EqTable;
                bsMan.DataSource = ManTable;
                bsManFilter.DataSource = ManTableFilter;
                bsMesUn.DataSource = MesUnTable;
            }
            catch (SqlException ex)
            {
                MessageBox.Show("" + ex.Message, "Ошибка подключения", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }
// Ну и тут обновление:
private void btnEqUpdate_Click(object sender, EventArgs e)
        {
            dAEq.Update((DataTable)bsEq.DataSource);
        }
//Это вставка картинки:
private void button1_Click(object sender, EventArgs e)
        {
            dGV_Eq.CurrentCell = dGV_Eq.Rows[SelectedRowNow].Cells[16];
            dGV_Eq.EditMode = DataGridViewEditMode.EditProgrammatically;
            dGV_Eq.BeginEdit(true);
            MemoryStream memoryStream = new MemoryStream();
            dGV_Eq.Rows[SelectedRowNow].Cells[16].Value = null;
            if (OpenImageFileDialog.ShowDialog() == DialogResult.OK)
            {
                Image Image = Image.FromFile(OpenImageFileDialog.FileName);
                Image.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Jpeg);
                dGV_Eq.Rows[SelectedRowNow].Cells[16].Value = memoryStream.ToArray();
            }
            dGV_Eq.EndEdit();
        }



Вроде все правильно...

Прошу ткнуть носом если что не так!
...
Рейтинг: 0 / 0
sqlCommand на вставку изображения в нужную ячейку
    #38964239
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я не могу понять почему ячейка не переходит в режим редактирования
т.е.
Код: c#
1.
dGV_Eq.BeginEdit(true);

всегда возвращает false.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
private void button1_Click(object sender, EventArgs e)
        {
            dGV_Eq.CurrentCell = dGV_Eq.Rows[SelectedRowNow].Cells[16];
            dGV_Eq.EditMode = DataGridViewEditMode.EditProgrammatically;
            dGV_Eq.BeginEdit(true);
            MemoryStream memoryStream = new MemoryStream();
            dGV_Eq.Rows[SelectedRowNow].Cells[16].Value = null;
            if (OpenImageFileDialog.ShowDialog() == DialogResult.OK)
            {
                Image Image = Image.FromFile(OpenImageFileDialog.FileName);
                Image.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Jpeg);
                dGV_Eq.Rows[SelectedRowNow].Cells[16].Value = memoryStream.ToArray();
            }
            dGV_Eq.EndEdit();
        }


Работает так: Выбираю нужную строку. Жму button1. Выбираю изображение. ОК. Картинка вставляется в ячейку.
НО!
Код: c#
1.
pictureBoxImage.DataBindings.Add("Image", bsEq, "Image", true, DataSourceUpdateMode.OnPropertyChanged);

не срабатывает. Т.е. картинка не сбиндилась еще.
Потом я кликаю на ячейке куда вставилась картинка (если тыкнуть в другое место, то картинка слетит. Почему не знаю). Затем еще раз жму button1. Выбираю изображение (любое другое или тоже ) . Жму ОК. Картинка вставляется в ячейку и отображается в pictureBoxImage. Бинд прошел. И апдейт работает.
Я уже все мозги сломал...

I need somebody help! (c)
...
Рейтинг: 0 / 0
sqlCommand на вставку изображения в нужную ячейку
    #38964321
Ashoorup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не понимаю как это работает но стало работать так:
Добавил регион
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
        #region "bitmaps"
        private byte[] oImage = new byte[] {
        0x42, 0x4D, 0xC6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x76, 
        0x0, 0x0, 0x0, 0x28, 0x0, 0x0, 0x0, 0xB, 0x0, 0x0, 0x0, 0xA,
        0x0, 0x0, 0x0, 0x1, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x50,
        0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10,
        0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
        0x0, 0x80, 0x0, 0x0, 0x80, 0x0, 0x0, 0x0, 0x80, 0x80, 0x0, 
        0x80, 0x0, 0x0, 0x0, 0x80, 0x0, 0x80, 0x0, 0x80, 0x80, 0x0, 
        0x0, 0xC0, 0xC0, 0xC0, 0x0, 0x80, 0x80, 0x80, 0x0, 0x0, 0x0,
        0xFF, 0x0, 0x0, 0xFF, 0x0, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0xFF, 
        0x0, 0x0, 0x0, 0xFF, 0x0, 0xFF, 0x0, 0xFF, 0xFF, 0x0, 0x0, 
        0xFF, 0xFF, 0xFF, 0x0, 0xFF, 0xFF, 0x0, 0xF, 0xFF, 0xF0, 
        0x0, 0x0, 0xFF, 0x0, 0xFF, 0xF0, 0xF, 0xF0, 0x0, 0x0, 0xF0, 
        0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0x0, 0x0, 0xF0, 0xFF, 0xFF, 
        0xFF, 0xF0, 0xF0, 0x0, 0x0, 0xF, 0xFF, 0xFF, 0xFF, 0xFF, 
        0x0, 0x0, 0x0, 0xF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0, 0x0, 0x0, 
        0xF0, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0x0, 0x0, 0xF0, 0xFF, 
        0xFF, 0xFF, 0xF0, 0xF0, 0x0, 0x0, 0xFF, 0x0, 0xFF, 0xF0, 
        0xF, 0xF0, 0x0, 0x0, 0xFF, 0xFF, 0x0, 0xF, 0xFF, 0xF0, 0x0, 
        0x0};
        #endregion


И добавил событие клика
Код: c#
1.
2.
3.
4.
5.
6.
7.
private void dGV_Eq_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            dGV_Eq.CurrentCell = dGV_Eq.Rows[SelectedRowNow].Cells[16];
            DataGridViewImageCell cell = (DataGridViewImageCell)dGV_Eq.CurrentCell;
            Bitmap o = new Bitmap(new MemoryStream(oImage));
            cell.Value = o;
        }


В итоге что получается: при выборе строки в ячейку где должна быть картинка, заносится то что в регионе (как если бы я выбрал и вставил картинку по кнопке). Затем я тыкаю кнопку добавления/удаления картинки. Жму ОК. И все работает! Я не понимаю как... все почти методом ненаучного тыка...

Может кто толково объяснит как это работает? Пока считаю это дурацким костылем...
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / sqlCommand на вставку изображения в нужную ячейку
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]