System.Diagnostics.Process.Start для путей файлов PDF в SQL - PullRequest
0 голосов
/ 12 ноября 2018

Добрый день. В моем приложении C # Windows Forms я хотел бы открыть файлы .pdf. Код для этого:

private void btnOpenPdf_Click(object sender, EventArgs e)
{
    try
    {
        System.Diagnostics.Process.Start(lblPdf.Text);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

Пути к файлам .pdf хранятся в базе данных SQL. Они хранятся следующим образом: C: \ Folder1 \ Folder2 \ File Name

В этом примере это означает:

lblPdf.Text="C:\Folder1\Folder2\File Name";

* примечание: имена файлов хранятся без типов файлов (поэтому в конце файла нет .pdf)

Конечно, это не работает, поэтому я добавил "@" и ".pdf" в строку:

lblTest.Text = ("@" + "\"" + lblPdf.Text + ".pdf" + "\"");

Когда я проверяю это с помощью окна сообщения:

MessageBox.Show(lblTest);

Я получаю:

 @"C:\Folder1\Folder2\File Name.pdf"

Проблема, с которой я сталкиваюсь, заключается в том, что это работает:

private void btnOpenPdf_Click(object sender, EventArgs e)
{
    try
    {
        MessageBox.Show(lblTest.Text);            
        System.Diagnostics.Process.Start(@"C:\Folder1\Folder2\File Name.pdf");
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

и это не работает:

private void btnOpenPdf_Click(object sender, EventArgs e)
{
    try
    {
        MessageBox.Show(lblTest.Text);            
        System.Diagnostics.Process.Start(lblTest.Text);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

Может кто-нибудь пролить свет на то, почему это так?

Сообщение об ошибке, которое я получаю во втором примере: «Система не может найти указанный файл»

MessageBox.Show дает мне правильный синтаксис и путь к файлу в обоих случаях.

Спасибо.

Ответы [ 3 ]

0 голосов
/ 12 ноября 2018

@ Shovers и все, к кому это может относиться:

        private void btnOpenPdf_Click(object sender, EventArgs e)
{

        lblTest.Text = ("@" +lblPdf.Text + ".pdf" );
    try
    {
        MessageBox.Show(lblTest.Text);
        System.Diagnostics.Process.Start(lblTest.Text);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}
0 голосов
/ 12 ноября 2018

Спасибо, ребята.

Просто добавив

 + ".pdf"

на этикетке (lblPdf.Text) есть ответ.

private void btnOpenPdf_Click(object sender, EventArgs e)
{
    try
    {
        System.Diagnostics.Process.Start(lblPdf.Text + ".pdf");
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}
0 голосов
/ 12 ноября 2018

Я могу дать вам несколько советов:

1 Исключения

Правильная обработка исключений - моя любимая мозоль, и ваша проблема проблематична. Ваш код обрабатывает фатальные исключения. И никогда не ловить смертельные исключения - очень важная часть. Делая это, вы получите только более понятные ошибки отслеживания. Вот две статьи, на которые я часто ссылаюсь:

https://blogs.msdn.microsoft.com/ericlippert/2008/09/10/vexing-exceptions/

https://www.codeproject.com/Articles/9538/Exception-Handling-Best-Practices-in-NET

2. Как эти магазины PDF с базой данных?

PDF-файлы - это большие двоичные объекты (BLOBS). Есть две школы хранения больших двоичных объектов с БД, и обе они влияют на путь, который вы должны указать:

  • Вы храните сам блоб в БД. Обычно для этого требуется настроить обработчик HTTP, чтобы предоставить файл для загрузки / использования пользователем. В этом случае вам нужен URL для доступа к этим файлам
  • Вы храните файлы в файловой системе. БД содержит только пути. В этом случае вам необходимо использовать URL, общий путь или любой другой способ загрузки этих файлов
  • Файловый поток SQL и эквивалентные атрибуты из других БД являются комбинацией этих двух. Он работает в основном как 1-й, с производительностью ближе к 2-му.
  • У вас может быть какая-то четвертая ублюдочная версия здесь. Или вы просто не поняли, как использовать значения в БД.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...