Michael Sernal Ответов: 2

Сохранение pdf-файла на SQL Server и его отображение обратно на VB.Net


Привет ребята,

Я работаю над проектом и вот что я хочу сделать:

1. чтобы предоставить пользователю возможность просматривать PDF-файл и PDF-файл будет сохранен в базе данных SQL-сервера.

2. чтобы отобразить эти данные в datagridview с sql server, и если пользователь выберет строку данных этого pdf-файла, он откроет этот файл или загрузит его.

задача 1 завершена, но мне трудно работать над 2-й, не могли бы вы дать некоторое представление о том, как это сделать, не могли бы вы, ребята, помочь мне поделиться каким-нибудь кодом? пожалуйста, заранее спасибо.

вот код на первой части.
Private Sub bsave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bsave.Click
        SavePDFtoDB()
    End Sub

Private Sub bbrowse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bbrowse.Click
        openfd.InitialDirectory = "C:\"
        openfd.Title = "Open a PDF file"
        openfd.Filter = "PDF files|*.pdf"
        openfd.ShowDialog()
        TextBox1.Text = openfd.FileName
    End Sub

Private Sub SavePDFtoDB()
        Try
            Dim sqlconn As SqlConnection
            Dim conn As String = "Data Source=myComputer\SQLEXPRESS;Initial Catalog=dbsample;Integrated Security=SSPI;"
            sqlconn = New SqlConnection(conn)
            Dim sqlquery As New SqlCommand

            Dim fInfo As New FileInfo(TextBox1.Text)
            Dim numBytes As Long = fInfo.Length
            Dim fStream As New FileStream(TextBox1.Text, FileMode.Open, FileAccess.Read)
            Dim br As New BinaryReader(fStream)
            Dim data As Byte() = br.ReadBytes(CInt(numBytes))
            br.Close()
            fStream.Close()

            'Insert the details into the database
            sqlquery.Connection = sqlconn
            sqlconn.Open()
            sqlquery.CommandText = "INSERT INTO tbldocument(filename, extension, content)VALUES(@filename, @extension, @content)"
            sqlquery.Parameters.Add(New System.Data.SqlClient.SqlParameter("@filename", TextBox1.Text))
            sqlquery.Parameters.Add(New System.Data.SqlClient.SqlParameter("@extension", ".pdf"))
            sqlquery.Parameters.Add(New System.Data.SqlClient.SqlParameter("@content", data))
            sqlquery.ExecuteNonQuery()
            sqlconn.Close()
            MsgBox("Saved")
        Catch err As Exception
            MsgBox(err.Message)
        End Try
    End Sub

2 Ответов

Рейтинг:
8

Azmy

кодирование для работы с произвольными PDF в виде .Чистая :

Цитата:
cmd = New OleDbCommand("select * from tb_pdf where id_pdf ='" & txt_cari.Текст & "'", пасое)
rd = cmd.Метода executereader
РД.Читать()
Если РД.Затем HasRows
Dim fs As FileStream = ничего
Dim ds как набор данных
Дим темп как String = "E:\Referensi глаг.Чистая\загрузить Дэн tampil PDF файл\файл\" + txt_cari.Текст
АДП = новый объект oledbdataadapter("Select * из tb_pdf где id_pdf ='" &амп; txt_cari.Текст & "'", пасое)
ds = новый набор данных
АДП.Заполнить(ДС, "tb_pdf")
Дим майроу как Датароу
myRow = ds.Tables("tb_pdf").Rows(0)
Dim DataPDF() В Виде Байта
DataPDF = myRow("pdf")
Тусклый Счетчик Как Длинный
Счетчик = UBound(DataPDF)
ФС = новый хранилище FileStream ("темп", содержит filemode.OpenOrCreate, FileAccess.Писать)
fs.Write(DataPDF, 0, счетчик)
ПС.Рядом()
АДП.Распоряжаться()
AxAcroPDF1.src = (temp)
AxAcroPDF1.Обновить()
'Метода webbrowser1.Обновить()
'Метода webbrowser1.Выберите(темп)
Еще
MsgBox("aaa")
берсих()
Конец, Если


Member 11164402

спасибо очень помочь полный

Рейтинг:
1

OriginalGriff

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

/// <summary>
/// Add a download file's information to a table row.
/// </summary>
/// <param name="dl"></param>
/// <returns></returns>
private static HtmlTableRow AddDownloadFile(Downloadable dl)
    {
    HtmlTableRow row = new HtmlTableRow();
    // File name
    HtmlTableCell cell = new HtmlTableCell();
    cell.InnerHtml = "<a href=\"FileTransferDownload.aspx?file=" + dl.Id + "\" target=\"_blank\">" + dl.FileName + "</a>";
    row.Cells.Add(cell);
    // Version
    cell = new HtmlTableCell();
    cell.InnerText = dl.Version.ToString();
    row.Cells.Add(cell);
    // Upload date
    cell = new HtmlTableCell();
    cell.InnerText = dl.UploadedOn.ToString();
    row.Cells.Add(cell);
    return row;
    }

А затем извлеките файл из БД и запустите загрузку в файле aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="FileTransferDownload.aspx.cs" Inherits="FileTransferDownload" %>

<%  
    // Send a download file to the client given the filename.    
    string guid = Request.QueryString["file"];
    string fileName = "ERROR";
    byte[] data = new byte[] { 0, 0, 0, 0 };
    string strCon = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["DownloadDatabase"].ConnectionString;
    using (System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(strCon))
        {
        con.Open();
        string strcmd = "SELECT [iD] ,cn.[fileName],[description] ,[dataContent] ,[version] " +
                        "FROM dlContent cn " +

                        "WHERE cn.iD=@ID";
        using (System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(strcmd, con))
            {
            cmd.Parameters.AddWithValue("@ID", guid);
            using (System.Data.SqlClient.SqlDataReader r = cmd.ExecuteReader())
                {
                if (r.Read())
                    {
                    fileName = (string) r["filename"];
                    data = (byte[]) r["dataContent"];
                    }
                }
            }
        }
    Response.Clear();
    Response.AddHeader("Cache-Control", "no-cache, must-revalidate, post-check=0, pre-check=0");
    Response.AddHeader("Pragma", "no-cache");
    Response.AddHeader("Content-Description", "File Download");
    Response.AddHeader("Content-Type", "application/force-download");
    Response.AddHeader("Content-Transfer-Encoding", "binary\n");
    Response.AddHeader("content-disposition", "attachment;filename=" + fileName);
    Response.BinaryWrite(data);
    //Response.WriteFile("wm5ftdata/" + fileName);
    Response.End();  
%>

Файл .CS в значительной степени пуст:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class FileTransferDownload : System.Web.UI.Page
    {
    protected void Page_Load(object sender, EventArgs e)
        {

        }
    }


Michael Sernal

Привет OriginalGriff,

Спасибо, что поделились своей идеей, но я не могу получить четкую картину, потому что я не знаком с aspx или asp.net-это моя вина. И О, я новичок в проекте code, и я все еще с нетерпением жду идей других людей, должен ли я принять это решение? или я оставлю это на потом? если вы не возражаете, если я спрошу, спасибо.

OriginalGriff

Примите решение, если оно решило вашу проблему, в противном случае сохраните его на потом :смейтесь: