1 / 1 / 1
Регистрация: 17.04.2015
Сообщений: 114

Запись pdf файла в поле virbinary(max)

06.05.2015, 13:00. Показов 5061. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите кто может.
Передо мной стоит решение такой задачи: имеется таблица в которой присутствует поле с типом virbinary(max) в нем должны храниться pdf и txt файлы. Добавление происходит через форму и при нажатии на поле открывается файл.
Собственно сама проблема заключается в том, что нет идей каким образом и с помощью каких средств происходит выбор файла и сохранение его в базу.
Зарание благодарен.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.05.2015, 13:00
Ответы с готовыми решениями:

Запись Wordовского файла в *.PDF
Народ, прошу помощи. Сам давно не программировал, а тут начальство озадачило мою жену: изменить адрес фирмы во всех Wordовских файлах....

Создание, запись, чтение .pdf файла или бинфайла в С#
Привет! Мне нужно создать писать и читать бинфайлы или .pdf файлы в С#. Но так чтобы никто не мог прочитать и изменить напрямую содержимое...

Запись файла в CLOB-поле Oracle
Мне необходимо вести в Оракле архив всех полученных документов. Не найдя каких-либо продвинутых алгоритмов(понятных мне), я решил делать...

35
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
07.05.2015, 12:11
Цитата Сообщение от Krish Посмотреть сообщение
с помощью каких средств происходит выбор файла и сохранение его в базу.
В смысле средств? Как добавить файл данных (в бинарном виде, т.е. как массив байт) в БД?
0
1 / 1 / 1
Регистрация: 17.04.2015
Сообщений: 114
12.05.2015, 09:11  [ТС]
Именно
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
12.05.2015, 09:24
Цитата Сообщение от Krish Посмотреть сообщение
Именно
Прочитать файл как массив байт (System.IO.File.ReadAllBytes()), и потом поместить его в поле соответствующего типа в БД.
0
1 / 1 / 1
Регистрация: 17.04.2015
Сообщений: 114
12.05.2015, 11:00  [ТС]
Это если коротко, мне в подробностях не понятно как это сделать.
У меня на форме перед добавлением записи в базу заполняются текст боксы и потом по нажатию кнопки данные попадают в DataGridView.
То есть нужно выбрать файл, заполнить поля и потом добавить. Как добавить все денные из текст боксов я знаю, а как организовать выбор файла и куда писать код на прочтение файла как массив байтов не знаю.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
12.05.2015, 11:29
Krish, бросьте на форму текст бокс, в который будет вписан путь к файлу (или лейбл, если не хотите чтобы пользователь руками путь правил) и рядом добавьте кнопку для выбора файла.
В обработчике кнопки пропишите:
C#
1
2
3
4
5
6
7
8
9
10
using (var filePicker = new OpenFileDialog())
{
    filePicker.CheckFileExists = true;
    filePicker.CheckPathExists = true;
    filePicker.Filter = "Text files (*.txt)|*.txt|Portable Document Format files (*.pdf)|*.pdf|All files (*.*)|*.*";
    filePicker.RestoreDirectory = true;
 
    if (filePicker.ShowDialog(this) == DialogResult.OK)
        textBoxOrLabel.Text = filePicker.FileName;
}
И по нажатию кнопки считывайте этот файл в массив байт (using System.IO):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void SaveButtonClick(object sender, EventArgs e)
{
    ...
    var filename = textBoxOrLabel.Text;
    byte[] fileContents;
    if (TryReadFile(filename, out fileContents))
       // Добавление массива fileContents в грид или в SQL запрос.
    else
       return;
}
 
bool TryReadFile(string path, out byte[] buffer)
{
   buffer = null;
  
   if (string.IsNullOrEmpty(path)) return true; // Файл не задан
 
   if (File.Exists(path))
      try { buffer = File.ReadAllBytes(path); }
      catch (IOException) { return MessageBox.Show("Не удалось прочитать файл. Продолжить?", "Ошибка чтения", MessageBoxButtons.YesNo, MessageBoxIcon.Error) == DialogResult.Yes; }
   else return MessageBox.Show("Выбранный файл не существует. Продолжить?", "Файл не найден", MessageBoxButtons.YesNo, MessageBoxIcon.Error) == DialogResult.Yes;
   return true;
}
1
1 / 1 / 1
Регистрация: 17.04.2015
Сообщений: 114
12.05.2015, 12:00  [ТС]
Пишет что TryReadFile не существует в данном контексте
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
12.05.2015, 12:23
Цитата Сообщение от Krish Посмотреть сообщение
Пишет что TryReadFile не существует в данном контексте
Скопируйте метод TryGetFile в область видимости обработчика кнопки.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
12.05.2015, 12:42
kolorotur, ятд для ТС проще было бы с диалогом.
Вот рабочий пример, вместе с БД и прочим. Можно добавлять и извлекать файлы, любые, не только pdf.
Во вложении полностью рабочий пример.
Вложения
Тип файла: rar DatabaseTestApp.rar (88.5 Кб, 65 просмотров)
0
1 / 1 / 1
Регистрация: 17.04.2015
Сообщений: 114
12.05.2015, 13:25  [ТС]
Цитата Сообщение от insite2012 Посмотреть сообщение
DatabaseTestApp.rar (88.5 Кб, 0 просмотров)
Просмотреть как работает не могу, SQLlite нет.
А использовать код не получается, он не подходит, если дописать к моему добавлению строки...могу скинуть часть кода что бы было видно как я добавляю записи.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
12.05.2015, 13:28
Цитата Сообщение от Krish Посмотреть сообщение
Просмотреть как работает не могу, SQLlite нет.
Там всего одна dll нужна. Это я забыл, не положил ее в архив. Вот проект, уже с ней.
Вложения
Тип файла: rar DatabaseTestApp.rar (520.2 Кб, 68 просмотров)
2
1 / 1 / 1
Регистрация: 17.04.2015
Сообщений: 114
12.05.2015, 13:47  [ТС]
insite2012, нужна небольшая помощь, я разбил твой код на разные кнопки, но что-то не получается.
Тут я выбираю файл и вношу его путь в текст бокс.
C#
1
2
3
4
5
6
7
8
9
10
11
12
private void button3_Click(object sender, EventArgs e)
        {
 
            using (OpenFileDialog dialog = new OpenFileDialog() { FileName = "" })
            {
                if (dialog.ShowDialog() == DialogResult.OK)
                {
                    byte[] data = File.ReadAllBytes(dialog.FileName);
                    pDFTextBox.Text = dialog.FileName;
                }
            }
        }
А тут вместе со всеми строками вношу в базу, но ругается что формат поля PDF не соответствует.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private void button1_Click(object sender, EventArgs e)
        {
             
 
            DataTable sk = this.database1DataSet.Literatura;
            DataRow wr = sk.NewRow();
            wr["Nazv"] = this.nazvTextBox.Text;
            wr["Izdanie"] = this.izdanieTextBox.Text;
            wr["Avtori"] = this.avtoriTextBox.Text;
            wr["God"] = int.Parse(this.godTextBox.Text);
            wr["Slova"] = this.slovaTextBox.Text;  
            wr["ID_tip"] = this.comboBox1.SelectedValue;
            wr["ID_yazik"] = this.comboBox2.SelectedValue;
            wr["Stranici"] = this.straniciTextBox.Text;
            wr["ID_user"] = this.comboBox3.SelectedValue;
            wr["Rezume"] = this.rezumeTextBox.Text;
            wr["PDF"] = this.pDFTextBox.Text;
            sk.Rows.Add(wr);
            this.literaturaTableAdapter.Update(this.database1DataSet.Literatura);
            this.litTableAdapter.Fill(this.database1DataSet.Lit);
            
        }
Может что-то не так сделал?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
12.05.2015, 13:55
Цитата Сообщение от insite2012 Посмотреть сообщение
ятд для ТС проще было бы с диалогом.
Так там же диалог и используется, см. первый сниппет
0
1 / 1 / 1
Регистрация: 17.04.2015
Сообщений: 114
12.05.2015, 14:47  [ТС]
kolorotur, insite2012, мне нужно было изначально свой код скинуть, ибо как ваш использовать, дополнив свой, не пойму.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
12.05.2015, 16:10
Цитата Сообщение от kolorotur Посмотреть сообщение
Так там же диалог и используется
kolorotur, да, сейчас увидел))) Просто я, как правило, неявную типизацию использую только там, где без нее никак (по советам Троелсена), и потому глянув, не понял что используется.
0
 Аватар для pincet
1655 / 1154 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
12.05.2015, 16:39
Цитата Сообщение от Krish Посмотреть сообщение
поле с типом virbinary(max) в нем должны храниться pdf и txt файлы.
а зачем? Храни ссылки на файлы, а файлы храни на диске
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
12.05.2015, 16:55
Цитата Сообщение от pincet Посмотреть сообщение
а зачем? Храни ссылки на файлы, а файлы храни на диске
Файлы имеют особенность быть удаленными или переименованными, база имеет особенность мигрировать с одной системы на другую и т.д.
В итоге нарушается целостность данных и повышается стоимость поддержки.
0
 Аватар для pincet
1655 / 1154 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
12.05.2015, 16:57
ну как-то и в базе при желании удалить. А если создать хранилку грамотную - вообще песня. Хотя не настаиваю.
0
1 / 1 / 1
Регистрация: 17.04.2015
Сообщений: 114
13.05.2015, 08:09  [ТС]
Вопрос все еще актуален...
0
1 / 1 / 1
Регистрация: 17.04.2015
Сообщений: 114
25.05.2015, 12:43  [ТС]
kolorotur, использую твой метод добавления файла в бд, все работает, но вот с выгрузкой его от туда проблемы
Пытаюсь сделать это методом который предложил insite2012, но не знаю как заменить строку 6, там где DBTest, у меня база на другой платформе нежели у него...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if (litDataGridView.SelectedRows[0].Cells[0].Value == null)
            {
                return;
            }
            string name = litDataGridView.SelectedRows[0].Cells[0].Value.ToString();
            byte[] data = DBTest.GetDataFromBase(name);
 
            using (SaveFileDialog dialog = new SaveFileDialog() { FileName = name })
            {
                if (dialog.ShowDialog() == DialogResult.OK)
                {
                    File.WriteAllBytes(dialog.FileName, data);
                }
            }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.05.2015, 12:43
Помогаю со студенческими работами здесь

Запись содержимого файла в поле memo
Смотрите как сделал. Создал поле memo в поле это записал содержимое файла. Добавил на форму OnKeyPress , записываю нажатую клавишу в...

Запись в поле BLOB файла rtf из RichEdit
Приветствую. Как можно записать в ячейку таблицы BLOB данные из RichEdit в формате RTF? Пишу вот такой код, но в поле BLOB не...

Запись файла в BLOB поле SQL запросом
Имеется код для записи файла в BLOB поле с помощью ADOTable ADOTable2->Active=true; ADOTable2->Append(); TMemoryStream *M = new...

Даны векторы a и b , состоящие из семи компонентов. Найти max(max(Ai), max(Bi), max(¦Ai-Bi¦), max(Ai+Bі),1)
Даны векторы a и b , состоящие из семи компонентов. Найти max(max(Ai), max(Bi), max(¦Ai-Bi¦), max(Ai+Bі),1).

Запись изображения или просто двоичного файла в поле OLE Access
Помогите пожалуйста примером, как сохранить файл с картинкой в поле OLE. Уже весь мозг сломал.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: показать затраченные материалы за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В качестве. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru