2

我有一个 SQL Server 数据库,它有一个包含 varbinary 列的表。

该表有数万行。

此 varbinary 列包含文档:85% 为 MS Word .doc 格式,10% 为 .docx 格式,其余为 .pdf 和 .rtf。

所有这些文档中都有一个特定的字符串(一个电子邮件地址)。我想用一个新字符串(更新的电子邮件地址)替换所有这些文档中的这个字符串。(要清楚:要查找的字符串和替换它的字符串在所有情况下都是相同的)。

理想情况下,我希望能够对所有文件类型执行此操作,但如果只有 .doc 和 .docx 才有可能,那至少可以解决大部分问题。

如果可能的话,我也不想安装 MS Word,但很感激这可能是必要的。

谢谢!

4

2 回答 2

0

您可以将值转换为 VarBinary,然后替换该值。使用以下链接替换 ​​varbinary 值:

http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=76304

于 2013-06-12T11:01:05.757 回答
0

您可以通过使用 Win32 API 将 BLOB 放入变量中来管理 FILESTREAM 数据。这样,您就可以在变量中获取 BLOB 的内容,就好像它是在记事本中打开的一样。使用替换来更新 .DOC、.DOCX 和 .RTF 文件。我不知道如何更新 PDF。

此链接包含将 BLOB 加载到 C# 代码中的变量中的 C# 代码。然后,您也可以使用从 DB 派生的路径、文件名和扩展名来保存它。这是代码的一小段引用:

//Read the data from the FILESTREAM
//BLOB.
sqlFileStream.Seek(0L, SeekOrigin.Begin);

numBytes = sqlFileStream.Read(buffer, 0, buffer.Length);

string readData = unicode.GetString(buffer);

if (numBytes != 0)
    Console.WriteLine(readData);  
//Here you have contents of your BLOB as if opened in Notepad. Use Replace to update .doc, .docx and .rtf files.

//Write the string, "EKG data." to the FILESTREAM BLOB.
//In your application this string would be replaced with
//the binary data that you want to write.

string someData = "EKG data.";
Encoding unicode = Encoding.GetEncoding(0);

sqlFileStream.Write(unicode.GetBytes(someData.ToCharArray()),
     0,
     someData.Length);

另请参阅在客户端应用程序中使用 FILESTREAM 存储

于 2013-06-21T11:16:24.800 回答