Member 13708070 Ответов: 1

C# сохранить/просмотреть PDF - файл из базы данных SQL?


Привет,

я использую Visual Studio 2017, и можно загрузить PDF в databse, а затем просмотреть этот PDF-файл?
Я использую AcroPDFLib.

Я открыл pdf в AcroPDF, а затем пытаюсь сохранить этот файл, чтобы правильно построить таблицу базы данных... но это не работает.

Что я уже пробовал:

Все, что я знаю :(

Я пытался:
- подключите axAcrobatPDF к строке таблицы...
- конвертировать PDF в изображения, а затем Сохранить изображение в базе данных, а затем преобразовать изображение в формат PDF и открывается новый файл PDF в axAcrobatPDF

Richard MacCutchan

Почему вы конвертируете между PDF и изображением? Просто сохраните PDF-файл как есть.

Member 13708070

Потому что проще сохранить изображение, а затем просмотреть его в PictureBox из базы данных, чем сохранить и просмотреть PDF в axAcrobatPDF...

Этот метод и непосредственно сохранение pdf в databse не работает.

Member 13708070

Теперь у меня есть такая программа:

SqlConnection connection = new SqlConnection("источник данных = (LocalDB)\\MSSQLLocalDB; AttachDbFilename = ...\\Базы данных1.МДФ; Комплексная безопасность = истина");
частный недействительными обработчика button1_click(объект отправителя, EventArgs в электронной)
{
пробовать
{
соединение.Открыть();
SqlCommand cmd = соединение.CreateCommand();
УМК.Свойство Commandtype = Значение Commandtype.Текст;
УМК.CommandText = "вставить в [таблицу] (Id,cos,plik) значения ('" + idTextBox.Текст + "', '" + cosTextBox.Текст + "','" + axAcroPDF1.src + "')";
УМК.Метод executenonquery();
соединение.Закрывать();
idTextBox.Текст = "";
костекстбокс.Текст = "";
axAcroPDF1.в src = "";
отображать данные();
}
поймать (исключение бывший)
{
Ящик для сообщений.Шоу("ошибка\п" + экс.Сообщение, "Ошибка", MessageBoxButtons.Хорошо, MessageBoxIcon.Ошибка);
}
}
общественного недействительными display_data()
{
соединение.Открыть();
SqlCommand cmd = соединение.CreateCommand();
УМК.Свойство Commandtype = Значение Commandtype.Текст;
УМК.CommandText = "select * from [Table]";
УМК.Метод executenonquery();
DataTable dta = новый DataTable();
SqlDataAdapter dataadp = новый SqlDataAdapter(cmd);
dataadp.Заполнить(ДТА);
tableDataGridView.Источник данных = ДТА;
соединение.Закрывать();
}

строка imgLocation = "";
частный недействительными методе button2_click(объект отправителя, EventArgs в электронной)
{
Диалоговое диалоговое окно openfiledialog = новое диалоговое окно openfiledialog();
диалог.Фильтр = "все файлы(*.*)|*.*|PDF-файлы(*.файл PDF)|*.формат PDF|JPG файлы(*.в формате JPG)|*.файлы в формате PDF|в формате PNG(*.формат PNG)|*.ПНГ";
если (диалог.ShowDialog() == DialogResult.ОК)
{
imgLocation = диалог.имя файла.Метод toString();
axAcroPDF1.src = диалог.имя файла.Метод toString();
}
}
}

И когда я попытался добавить в базу данных я получил ошибку:

ОШИБКА
Неявное преобразование из типа данных varchar в varbinary(max) не допускается. Используйте функцию CONVERT для выполнения этого запроса.

1 Ответов

Рейтинг:
2

RickZeeland

Смотрите ответ здесь: Сохранение и просмотр pdf - файла из базы данных SQL server в c# WinForms[^]

Однако в коде в этом примере, похоже, есть какой-то мусор, например:
<strong class="highlight">

Это должно выглядеть так я думаю:

Система Импорта.Данных.Поставщики sqlclient

'IF OBJECT_ID('PDF', 'U') НЕ ЯВЛЯЕТСЯ НУЛЕВОЙ ТАБЛИЦЕЙ ОТБРАСЫВАНИЯ PDF
'СОЗДАТЬ ТАБЛИЦУ PDF
'(
'RecordId int identity(1000, 1) первичный ключ,
' PDF типа varbinary(Макс)
')

Публичный класс frmPDF

Private Sub ButtonUpload_Click(бывал отправитель как система.Объект, бывал е как система.EventArgs) Обрабатывает ButtonUpload.Щелчок
Используя коробки как новое sqlconnection("Данные Источник=apex2006sql;начальный каталог=Скотт;Комплексная безопасность=истина;")
Коннектикут.Открыть()
Использование cmd в качестве новой команды SqlCommand("Insert Into PDF (PDF) Значения (@PDF)", conn)
cmd.параметры.Добавить(новый SqlParameter ("@PDF", SqlDbType.VarBinary)).Система Ценностей=.ИО.Файл.ReadAllBytes("C:\file.pdf")
УМК.Метод executenonquery()
Конец Использования
Коннектикут.Закрывать()
Конец Использования
Конец Подводной Лодки

Private Sub ButtonDownload_Click(ByVal sender As System.Объект, бывал е как система.EventArgs) Обрабатывает ButtonDownload.Щелчок
Dim sFilePath как строка
Тусклый буфер в виде байта()
Используя коробки как новое sqlconnection("Данные Источник=apex2006sql;начальный каталог=Скотт;Комплексная безопасность=истина;")
Коннектикут.Открыть()
Использование cmd в качестве новой команды SqlCommand("Select Top 1 PDF От PDF", Коннектикут)
буфер = cmd.Executescalar так()
Конец Использования
Коннектикут.Закрывать()
Конец Использования
sFilePath = System.IO.Path.GetTempFileName()
System.IO.File.Move(sFilePath, System.IO.Path.ChangeExtension(sFilePath, ".pdf"))
sFilePath = System.IO.Path.ChangeExtension(sFilePath, ".pdf")
System.IO.File.WriteAllBytes(sFilePath, буфер)
Дим выступать в качестве меры(строки) = новый действие(строки)(оператор addressof OpenPDFFile)
act.BeginInvoke(sFilePath, Nothing, Nothing)
Конец Подводной Лодки

Private Shared Sub OpenPDFFile(ByVal sFilePath)
Использование p в качестве новой системы.Диагностика.Процесс
п. Информацию = Новая Система.Диагностика.ProcessStartInfo(sFilePath)
п. Начать()
п. WaitForExit()
Попробуй
System.IO.File.Удалить(sFilePath)
Поймать
Конец Попытки
Конец Использования
Конец Подводной Лодки
End Класса