Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/26: Рейтинг темы: голосов - 26, средняя оценка - 5.00
1 / 1 / 1
Регистрация: 17.04.2015
Сообщений: 114

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

06.05.2015, 13:00. Показов 4988. Ответов 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
1654 / 1153 / 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
1654 / 1153 / 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru