【发布时间】:2017-07-11 09:51:04
【问题描述】:
我想提取在 SQL 中存储为图像类型字段的 word 文档,并将每个单独的文档保存在本地文件夹中。存储在 sql 中的图像类型数据中的 doc 文件是特殊编码的 OLEObjects。 我先尝试一个,但我需要对表中的每条记录做同样的事情。这是我到目前为止所做的:
Byte[] bytData = null;
string constring = @"mystirngconnection";
SqlCommand command = new SqlCommand(@"SELECT LongDescription FROM SuUserReport
WHERE ProductId = 53 AND UserReportId = 31525");
command.CommandType = CommandType.Text;
SqlConnection myconn = new SqlConnection(constring);
command.Connection = myconn;
myconn.Open();
using (SqlDataReader dr = command.ExecuteReader())
{
while (dr.Read())
{
bytData = (byte[])dr["LongDescription"];
}
}
if (bytData != null)
{
FileStream fs = new FileStream("C:\\Temp\\Test1.doc",
FileMode.OpenOrCreate, FileAccess.Write);
BinaryWriter br = new BinaryWriter(fs);
br.Write(bytData, 0, bytData.Length);
fs.Dispose();
}
我基本上有两个问题:
- 读取这类数据非常慢
- 使用上面的代码适用于普通的word文档但是我表中的信息有OLEObject编码的信息,代码保存了一个word文档但信息只有encoded characters
以前,当使用链接到 longDescription 图像类型字段的 Access 绑定对象框架打开表单时,这些图像(word 文档)会直接从 SQL 打开。用户可以通过双击这个特殊框架来编辑文档。以下代码打开文档并使其可用于保存更改:
With oleLongDescription
.Verb = acOLEVerbOpen 'In a separate window
.Action = acOLEActivate
End With
有人能帮我解决这个问题吗?我不介意使用 c# 或 vb,只要它有效 =)。
【问题讨论】:
-
您是否尝试过使用其他文件以确保文件没有损坏?
-
OLEObjects 的问题在于它们不是正确的 Word 文件,而是带有额外页眉和页脚的 Word 文件。这篇文章解释了为什么您导出的“word 文件”无法打开,并给出了一些关于在哪里查看的提示:social.msdn.microsoft.com/Forums/vstudio/en-US/…
-
谢谢亚历克斯,是的,我发现它们是存储在 sql 中的图像列中的 OLEobjects,而不是普通的 word 文档,这就是为什么其他人可以直接在 c# 或 vba 中读取他们的文件,但我不能我需要使用这个可怕的 ole 对象以某种方式获取信息。非常感谢您的链接,它看起来与我试图实现的非常相似 =)。
标签: c# sql-server vb.net