我们已将Worddocument(办公doc / docx文件)存储为varbinary(max)在SQL Server中,但是当我们以无格式方式显示其显示数据以及一些加密文本时……
文档内容,例如:
Description about the document :
(a) SQL Server 2016 to be used for all upcoming projects;
(b) SQL Server 2016 Enterprise edition will be used on all servers
(c) Assumptions:
(i) SQL Server will be installed on VM instances
Saved in SQL Server with below code:
create table Documents(id int identity(1,1), document VARBINARY(MAX))
go
--Insert Word document into database
INSERT INTO Documents(document)
SELECT * FROM OPENROWSET(BULK 'D:\found.docx', SINGLE_BLOB) AS doc
select * from documents
string sConn = @"server=.; database=DocumentManagement; Integrated Security=True";
SqlConnection objConn = new SqlConnection(sConn);
objConn.Open();
SqlCommand objCmd = new SqlCommand("BLOBViewer", objConn);
objCmd.CommandType = CommandType.StoredProcedure;
SqlDataReader dr = objCmd.ExecuteReader();
while (dr.Read())
{
Response.BinaryWrite((byte[])dr["Document"]);
}
Response.Flush();
Response.Close();
Response.End();
答案 0 :(得分:3)
.NET原生不支持阅读Word文档。 您必须使用一些第三方工具来实现此目的。 我们主要使用Aspose.Word,它不仅让您阅读内容,还可以做更多的事情;您也可以操作它。但这是有代价的。
如果您正在寻找免费的东西,那么我建议您将Word文档转换为PDF,然后将其存储在DB中。您可以使用大量免费的库来阅读PDF文件的内容。 PDFSharp和iTextSharp只是两个示例。
答案 1 :(得分:1)
这是您如何整齐地下载文件的方法。假设它已正确存储在SQL中。
但是,一次只能处理1个文件。您不能选择带有select * from documents
的所有文件,并且不能期望将它们下载为单个文件,它不能那样工作。因此,您必须创建一个存储过程,一次选择一个文件:select * from documents WHERE (Name = 'FileName')
或类似的文件。
//declare an empty byte array and filename
byte[] bin = new byte[0];
string fileName = "";
//use 'using' to properly close and dispose connections and objects
using (SqlConnection objConn = new SqlConnection(sConn))
using (SqlCommand objCmd = new SqlCommand("BLOBViewer", objConn))
{
objCmd.CommandType = CommandType.StoredProcedure;
objConn.Open();
using (SqlDataReader dr = objCmd.ExecuteReader())
{
while (dr.Read())
{
bin = (byte[])dr["Document"];
fileName = dr["Name"].ToString();
}
}
}
//check if there is a file
if (bin.Length == 0)
{
Label1.Text = "No file found";
return;
}
//send the file to the browser
Response.ClearHeaders();
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/msword";
Response.AddHeader("content-length", bin.Length.ToString());
Response.AddHeader("content-disposition", "attachment; filename=\"" + fileName + "\"");
Response.OutputStream.Write(bin, 0, bin.Length);
Response.Flush();
HttpContext.Current.ApplicationInstance.CompleteRequest();