如何使用ASP.NET网页将PDF文件保存到SQL表?

如何使用ASP.NET网页将PDF文件保存到SQL表?,asp.net,sql-server,asp.net-webpages,Asp.net,Sql Server,Asp.net Webpages,这看起来像一大堆,但实际上是一个非常集中的问题。这看起来比实际情况更重要,因为我提供了上下文和我迄今为止所能解决的问题 让我从一个更精确的问题开始:使用ASP.NET网页,我如何才能:a使用Formview将保存的PDF文件附加到数据库表,b在Gridview中选择数据库表行时允许用户查看保存的PDF文件 虽然我可以轻松地存储PDF文件的路径和文件名,但如果重命名、移动或删除PDF文件,则数据库记录现在有一个断开的链接。我的客户要求我将实际的PDF文件附加到数据库记录中,以防止断开链接 这就回答

这看起来像一大堆,但实际上是一个非常集中的问题。这看起来比实际情况更重要,因为我提供了上下文和我迄今为止所能解决的问题

让我从一个更精确的问题开始:使用ASP.NET网页,我如何才能:a使用Formview将保存的PDF文件附加到数据库表,b在Gridview中选择数据库表行时允许用户查看保存的PDF文件

虽然我可以轻松地存储PDF文件的路径和文件名,但如果重命名、移动或删除PDF文件,则数据库记录现在有一个断开的链接。我的客户要求我将实际的PDF文件附加到数据库记录中,以防止断开链接

这就回答了为什么:因为我的客户要求。现在问题是如何解决

以下是我到目前为止在研究中所做的工作:

我学习了如何为SQLServer2012数据库启用Filestream。 我创建了一个表,其中一列是varbinarymax。 代码块1中的表定义语言如下所示。 使用可用的在线示例,我能够测试和验证一个正在工作的T-SQL脚本-但是,我还没有成功地将其作为存储过程,因为我不知道如何将文件名作为Openrowset语句中的变量。下面代码块2中显示的脚本。 我画的一个大空白是等式的ASP.NET端。这是我希望建立的系统。只要他们按照这些思路工作,我就不会在细节方面受到限制

用户使用通过SqlDataSource连接到数据库的Formview来输入纸质表单上输入的值,最后将保存的PDF文件附加到扫描的PDF文件字段。 gridview会立即刷新,显示扫描的PDF表格的结果,允许用户选择一行并查看保存的PDF文件。 这种方法可行吗?任何进一步研究的方向都将不胜感激。谢谢你的帮助

代码块1:下面是SQL数据库表的定义

USE [IncidentReport_v3]
GO

/****** Object:  Table [dbo].[Scanned_PDFs]    Script Date: 1/13/2015 11:56:58 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[Scanned_PDFs](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [DateEntered] [date] NOT NULL,
    [Scanned_PDF_File] [varbinary](max) NOT NULL,
    CONSTRAINT [PK_Scanned_PDFs] PRIMARY KEY CLUSTERED ([ID] ASC) WITH (
        PAD_INDEX = OFF,
        STATISTICS_NORECOMPUTE = OFF,
        IGNORE_DUP_KEY = OFF,
        ALLOW_ROW_LOCKS = ON,
        ALLOW_PAGE_LOCKS = ON
    ) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

SET ANSI_PADDING OFF
GO
代码块2:这是我用来测试插入带有PDF文件的行的能力的T-Sql脚本。如果我手工键入PDF文件名和路径,它可以作为概念证明,但我需要将该文件名设置为用户提供的变量。我设想将其作为存储过程使用——或者我可以在客户端使用此代码?还不确定

USE IncidentReport_v3;
GO

DECLARE @pdf AS VARBINARY(max)

SELECT @pdf = cast(bulkcolumn AS VARBINARY(max))
FROM openrowset(BULK '\\wales\e$\test\test.pdf', SINGLE_BLOB) AS x

INSERT INTO dbo.Scanned_PDFs (
    DateEntered,
    Scanned_PDF_File
    )
SELECT cast('1/12/2015' AS DATE),
    @pdf;
GO
在进入数据层之前,您可能需要先查看。[Scanned_PDF_File]设置为结果。你可以从其他价值观中获得它


,可能会提供您所需的一切。

我之前看到了该链接,但我无法在ASP.NET端获得部分代码。看起来我可能需要在头上用一把更大的锤子。我希望我错过了一些非常明显的东西。哪个部分不起作用?您是否能够将PDF转换为字节数组并存储在数据库中?查看此处的链接页面,Dim bytes As byte=br.ReadBytesDirectCastfs.Length,Long会产生以下错误:无法将整型值转换为Long。请尝试将Long更改为integer这很简单?就这一点而言,没有错误。现在正在处理其余的问题,所以我们将从整体上看它是否有效。