Goran Bibic Ответов: 1

Извлечение pdf файла из SQL C#


Some help please
 
Insert into sql


yte[] filedata = null;  
           MemoryStream ms = new MemoryStream();  
           filedata = ms.GetBuffer();  
           axAcroPDF1.src = LocalEncoding.GetString(ms.ToArray());  
  
  
                   using (SqlConnection openCon = new SqlConnection(cs))  
                   {  
  
                       string saveStaff = "declare @maxNo integer = 0 select @maxNo = isnull(max(number), 0) from [dbo].[documents]; Set @maxNo=@maxNo+1; INSERT into dbo.documents (number, file_location, pdf_file) VALUES (@maxNo,@file_location,@pdf_file)";  
  
                       using (SqlCommand querySaveStaff = new SqlCommand(saveStaff))  
                       {  
                           querySaveStaff.Connection = openCon;                            
                           querySaveStaff.Parameters.Add("@file_location", SqlDbType.VarChar, 255).Value = file_locationTextBox.Text;  
                           querySaveStaff.Parameters.AddWithValue("@pdf_file",SqlDbType.VarBinary).Value=filedata;  
  
                           openCon.Open();  
                           querySaveStaff.ExecuteNonQuery();  
                           openCon.Close();  
  
                             
  
                       }  
  
                   }  
               }  


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

Выбор изменил datagrid поставьте этот код

Error is when retrieve file...(no have error) noting hapend....what I wrong?
 
I think at line 3 to line 9




try  
                {  
                     if (documentsDataGridView.SelectedRows[0].Cells["pdf_file"].Value != null)  
                     {  
                        byte[] ap = (byte[])documentsDataGridView.SelectedRows[0].Cells["pdf_file"].Value;  
                        MemoryStream ms = new MemoryStream(ap);  
                        axAcroPDF1.src = LocalEncoding.GetString(ms.ToArray());  
                          
                    }  
                    else {  
                         axAcroPDF1.src = null;  
                     }  
                }  
                catch  
                {  
                    axAcroPDF1.src = null;  
                }  

1 Ответов

Рейтинг:
7

OriginalGriff

Начните с того, что не проглотите свое исключение: когда вы используете пустой улов и не делаете с ним ничего полезного, вы отбрасываете всю информацию, необходимую для выявления проблемы и ее решения.
Сделать это:

try
{
    ...
}
catch (Exception ex)
{

    ... log the exception, display it in a message box,
    ... or stuff it on your web page - we have no idea
    ... what environment you are working in

    axAcroPDF1.src = null;
}
Затем, когда код будет запущен, вы можете посмотреть на исключение и, надеюсь, увидеть, что происходит не так. Но без этого вы работаете в темноте...


Goran Bibic

Идея есть:

Если у вас есть pdf, чтобы показать его в axAcroPDF1

Если у вас нет axAcroPDF1.src = null;

Какая-то помощь?

OriginalGriff

И что, по-вашему, происходит в данный момент?
Вы читали что-нибудь из того, что я написал?
Вы пробовали использовать отладчик?

Goran Bibic

Я читаю, я пытаюсь...но результата нет...Мне нужна помощь, чтобы решить эту проблему... Спасибо

Goran Bibic

Я попробую это сделать

byte[] ap = (byte[])(documentsDataGridView.SelectedRows[0].Ячейки["pdf_file"].Ценность);
MemoryStream ms = новый MemoryStream(ap);
ms.Position = 0;
Файл.WriteAllBytes(@"D:\mypdf.pdf", Мисс Тоаррей());
Процесс.Старт(@"D:\mypdf.pdf");

Не работают

OriginalGriff

:вздыхать:

"Это не работает", вероятно, самый бесполезный отчет о проблеме, который мы получаем - и мы получаем его много. Она ничего не говорит нам о том, что происходит или когда это происходит.
Итак, расскажите нам, что он делает, чего вы не ожидали, или не делает, что вы сделали.
Расскажите нам, что вы сделали, чтобы это произошло.
Сообщайте нам о любых сообщениях об ошибках.

Goran Bibic

Теперь у меня есть ошибка...как разместить фотографию?

OriginalGriff

Зачем мне изображение сообщения об ошибке?
Скопируйте и вставьте текст...

Goran Bibic

Следующее исключение произошло в DataGridView

Система.Значение параметра недопустимо. в системе.Рисование.Изображение.FromStream(Stream stream, Boolean validateImageData)

Это короткий текст ошибки. Но зачем рисовать изображение, когда я вставляю PDF в базу данных и хочу получить pdf в axAcroPDF1


Я попробую это сделать

byte[] ap = (byte[])(documentsDataGridView.SelectedRows[0].Ячейки["pdf_file"].Ценность);
MemoryStream ms = новый MemoryStream(ap);
ms.Position = 0;
Файл.WriteAllBytes(@"C:\PDFs.pdf", Мисс Тоаррей());
Процесс.Старт(@"C:\PDFs.pdf");

Goran Bibic

Не работа это ошибка

OriginalGriff

Это указывает на то, что существует проблема с файлом. Но... У нас нет доступа ни к вашей базе данных, ни к остальному вашему коду.

Первое, что нужно проверить, - это код, который вставляет файл в БД: используйте его для вставки известного хорошего PDF-файла, затем извлеките данные и сохраните их в виде файла. Сверьте этот файл с оригиналом: они одного размера? Правильно ли открывается новая копия в программе чтения PDF-файлов?

Если он проходит эти тесты, вы можете начать смотреть на код, который получает ваши данные, и пытается открыть его. Но не раньше!

Goran Bibic

Запрос таблицы

/****** Объект: таблица [dbo].[документы] Дата Написания Сценария: 2.8.2018. 09:25:21 ******/
УСТАНОВИТЕ ANSI_NULLS НА
ГО

УСТАНОВИТЕ QUOTED_IDENTIFIER НА
ГО

Создайте таблицу [dbo].[документы](
[id] [int] IDENTITY(1,1) NOT NULL,
[число] [int] NULL,
[count_number] [varchar](255) NULL,
[label] [varchar](255) NULL,
[партнер] [varchar](255) NULL,
[tax_number] [varchar](255) NULL,
[дата] [дата] NULL,
[file_location] [varchar](255) NULL,
[pdf_file] [varbinary](max) NULL,
Ограничение [PK_documents] первичный ключ КЛАСТЕРИЗОВАН
(
[id] ASC
)С ПОМОЩЬЮ (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) НА [ОСНОВНОЙ] ВЫРАЖЕНИЯХ TEXTIMAGE_ON [ПЕРВИЧНЫЙ]
ГО

Goran Bibic

Вставить в

частный недействительными методе button2_click(объект отправителя, EventArgs в е) //сохранение //сними
{
byte[] filedata = null;
MemoryStream ms = Новый Поток памяти();
filedata = ms.GetBuffer();
axAcroPDF1.src = локальное кодирование.GetString(ms.Метод toArray());

если (count_numberTextBox.Включено == правда)
{
если (строка.IsNullOrEmpty(idTextBox.Text))
{

using (SqlConnection openCon = new SqlConnection(cs))
{

строки saveStaff = "объявить @maxNo целое число = 0 выберите @maxNo = функция isnull(Max(число), 0) От на [dbo].[документы]; установить @maxNo=@maxNo+1; вставить в dbo.documents (number, count_number, label, partner, tax_number, date, file_location, pdf_file) значения (@maxNo,@count_number,@label,@partner,@tax_number,@date,@file_location,@pdf_file)";

используя (sqlcommand, который querySaveStaff = новая команда sqlcommand(saveStaff))
{
querySaveStaff.Соединение = openCon;
querySaveStaff.Parameters.Add("@count_number", SqlDbType.VarChar, 255).Value = count_numberTextBox.Text;
querySaveStaff.Parameters.Add("@label", SqlDbType.VarChar, 255).Value = labelTextBox.Text;
querySaveStaff.Parameters.Add("@partner", SqlDbType.VarChar, 255).Value = partnerComboBox.Текст;
querySaveStaff.Parameters.Add("@tax_number", SqlDbType.VarChar, 255).Value = tax_numberTextBox.Text;
querySaveStaff.Parameters.Add("@date", SqlDbType.Date).Value = dateDateTimePicker.Текст;
querySaveStaff.Parameters.Add("@file_location", SqlDbType.VarChar, 255).Value = file_locationTextBox.Text;
//querySaveStaff.Parameters.Add("@pdf_file", SqlDbType.VarChar, 255).Value = partner_typeComboBox.Текст;
querySaveStaff.Parameters.AddWithValue ("@pdf_file", SqlDbType.VarBinary).Значение = данным;

openCon.Открыть();
querySaveStaff.Метод executenonquery();
openCon.Закрывать();

dateDateTimePicker.Включен = ложь;
count_numberTextBox.Включен = ложь;
file_locationTextBox.Включен = ложь;
labelTextBox.Включен = ложь;
partnerComboBox.Включен = ложь;
tax_numberTextBox.Включен = ложь;
кнопки button3.Включен = ложь;
button4.Включен = ложь;


}

}
}
еще
{

using (SqlConnection openCon = new SqlConnection(cs))
{
строки saveStaff = "ДБО обновление.комплект документов count_number=@count_number, ярлык=@ярлык, партнер=@партнером, tax_number=@tax_number, дата=@дата, file_location=@file_location, pdf_file=@pdf_file где ID= " + idTextBox.Текст;

используя (sqlcommand, который querySaveStaff = новая команда sqlcommand(saveStaff))
{

querySaveStaff.Соединение = openCon;
querySaveStaff.Parameters.Add("@count_number", SqlDbType.VarChar, 255).Value = count_numberTextBox.Text;
querySaveStaff.Parameters.Add("@label", SqlDbType.VarChar, 255).Value = labelTextBox.Text;
querySaveStaff.Parameters.Add("@partner", SqlDbType.VarChar, 255).Value = partnerComboBox.Текст;
querySaveStaff.Parameters.Add("@tax_number", SqlDbType.VarChar, 255).Value = tax_numberTextBox.Text;
querySaveStaff.Parameters.Add("@date", SqlDbType.Date).Value = dateDateTimePicker.Текст;
querySaveStaff

OriginalGriff

Что ж.
Вот в чем твоя проблема.

Используйте отладчик и скажите мне точно, что у вас есть в filedata, когда вы выполняете эту строку:

querySaveStaff.Parameters.AddWithValue ("@pdf_file", SqlDbType.VarBinary).Значение = данным;

Затем просмотрите свой код и скажите мне, почему у вас это есть ...

Goran Bibic

Если я хорошо найду ошибку

Исключение: системы.UnauthorizedAccessException' in mscorlib.dll

OriginalGriff

А до этого, что вы нашли в filedata?

Goran Bibic

-ДМС 2018.EXE' (CLR v4.0.30319: DefaultDomain): загружен 'C:\WINDOWS\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll". Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'ДМС 2018.EXE' (среда CLR версии 4.0.30319: Домен_по_умолчанию): загрузил C:\Users\Bibic Горан\источник\репозитории\ДМС 2018\ДМС 2018\бин\отладки\ДМС 2018.exe'. Символы загружены.
'ДМС 2018.EXE' (среда CLR версии 4.0.30319: ДМС 2018.exe): C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System загружен '.Окна.Формы\v4.0_4.0.0.0__b77a5c561934e089\система.Окна.Forms.dll". Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'ДМС 2018.EXE' (среда CLR версии 4.0.30319: ДМС 2018.exe): загрузил C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll'. Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'ДМС 2018.EXE' (среда CLR версии 4.0.30319: ДМС 2018.exe): C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System загружен '.Чертеж\v4.0_4.0.0.0__b03f5f7f11d50a3a\система.Drawing.dll". Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'ДМС 2018.EXE' (среда CLR версии 4.0.30319: ДМС 2018.exe): C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System загружен '.Конфигурация\v4.0_4.0.0.0__b03f5f7f11d50a3a\система.Configuration.dll". Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'ДМС 2018.EXE' (среда CLR версии 4.0.30319: ДМС 2018.exe): C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System загружен '.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll". Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'ДМС 2018.EXE' (среда CLR версии 4.0.30319: ДМС 2018.exe): загружается 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll'. Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'ДМС 2018.EXE' (среда CLR версии 4.0.30319: ДМС 2018.exe): C:\WINDOWS\Microsoft.Net\assembly\GAC_32\System загружен '.Data\v4.0_4.0.0.0__b77a5c561934e089\System.Data.dll". Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'ДМС 2018.EXE' (среда CLR версии 4.0.30319: ДМС 2018.exe): C:\WINDOWS\Microsoft.Net\assembly\GAC_32\System загружен '.Транзакции\v4.0_4.0.0.0__b77a5c561934e089\система.Transactions.dll". Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'ДМС 2018.EXE' (среда CLR версии 4.0.30319: ДМС 2018.exe): C:\WINDOWS\Microsoft.Net\assembly\GAC_32\System загружен '.EnterpriseServices\v4.0_4.0.0.0__b03f5f7f11d50a3a\система.EnterpriseServices.dll". Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'ДМС 2018.EXE' (среда CLR версии 4.0.30319: ДМС 2018.exe): C:\WINDOWS\Microsoft.Net\assembly\GAC_32\System загружен '.EnterpriseServices\v4.0_4.0.0.0__b03f5f7f11d50a3a\система.Услуги предприятий.Wrapper.dll". Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'ДМС 2018.EXE' (среда CLR версии 4.0.30319: ДМС 2018.exe): C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Runtime загружен '.Кэширование\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Runtime.Caching.dll". Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'ДМС 2018.EXE' (среда CLR версии 4.0.30319: ДМС 2018.exe): загружается 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Data.DataSetExtensions\v4.0_4.0.0.0__b77a5c561934e089\System.Data.DataSetExtensions.dll'. Пропущенные символы загрузки. Модуль оптимизирован, и включена опция отладчика "только мой код".
'ДМС 2018.EXE' (среда CLR версии 4.0.30319: ДМС 2018.exe): загрузил C:\Users\Bibic Горан\источник\репозитории\ДМС 2018\ДМС 2018\бин\отладки\сборку axinterop.AcroPDFLib.dll". Модуль был построен без символов.
'ДМС 2018.EXE' (среда CLR версии 4.0.30319: ДМС 2018.exe): C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System загружен '.Цифры\v4.0_4.0.0.0__b77a5c561934e089\система.Numerics.dll". Пропущенные символы загрузки. Модуль опт

OriginalGriff

Если вы не собираетесь читать ничего, что я печатаю, есть ли смысл в том, чтобы вы отправили вопрос?

Goran Bibic

Я пытаюсь найти и просто это в отладчике. Где искать ошибки?