将PDF文件保存到SQL数据库

时间:2014-03-08 07:04:28

标签: c#

我正在使用C#。我想将PDF文件从Windows窗体应用程序存储到SQL数据库。我想再次将其检索到我的Windows窗体应用程序。我可以使用什么控件来上传PDF文件(例如我使用图片框的图像)。 PDF文件的数据类型是什么?

提前致谢

5 个答案:

答案 0 :(得分:4)

要选择文件,您可以使用OpenFileDialog

Saving any file into database

答案 1 :(得分:0)

Windows App Store中有一个应用程序,专门用于在SQL数据库中存储PDF文件信息和PDF元数据。 然后,您可以使用简单的标准SQL查询来搜索和过滤该数据库。

https://www.microsoft.com/en-us/store/p/pdfdb/9n4z1l2hc2c0

答案 2 :(得分:-1)

您最好将pdf存储在文件存储中,并在数据库中保存链接。

答案 3 :(得分:-1)

要在SQL Server数据库中存储PDF文件,您需要将文件的内容存储在BinaryData字段中。但是,我确信您在此设置中会遇到很多问题,您最好将文件内容保存在SystemData文件夹中,并将文件路径或名称存储到DB中。

这将更可靠,更易于维护。

如果您的应用程序仅存储文件,则另一种方法是使用MongoDb而不是SQL Server。我不熟悉,但很确定这将是一个简单而好的解决方案。

答案 4 :(得分:-1)

public void getTestReportDocument(string reportid, string extenstype)
{

    try
    {
        string filesName = "";
        if (sqlConn.State == ConnectionState.Closed)
            sqlConn.Open();

        if(extenstype == ".pdf")
        {
            filesName = Path.GetTempFileName();

        }
        else
        {
            filesName = Path.GetTempFileName() + extenstype;
        }


        SqlCommand cmd = new SqlCommand("GetTestReportDocuments", sqlConn);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@ReportID", reportid);

        using (SqlDataReader dr = cmd.ExecuteReader(System.Data.CommandBehavior.Default))
        {
            while (dr.Read())
            {
                int size = 1024 * 1024;
                byte[] buffer = new byte[size];
                int readBytes = 0;
                int index = 0;
                using (FileStream fs = new FileStream(filesName, FileMode.Create, FileAccess.Write, FileShare.None))
                {
                    while ((readBytes = (int)dr.GetBytes(0, index, buffer, 0, size)) > 0)
                    {
                        fs.Write(buffer, 0, readBytes);
                        index += readBytes;

                    }
                }

            }
        }
        Process prc = new Process();
        prc.StartInfo.FileName = filesName;
        prc.Start();

    }

    catch (Exception ex)
    {
        throw ex;
    }

    finally
    {
        //daDiagnosis.Dispose();
        //daDiagnosis = null;
    }

}

看看这个screenshot的解决方案。