我有一个SQL Server数据库,其中包含一个包含varbinary列的表。
此表有数万行。
此varbinary列包含文档:85%的MS Word .doc格式,10%的.docx格式,其余的格式为.pdf和.rtf。
所有这些文档中都有一个特定的字符串(电子邮件地址)。我想用新字符串(更新的电子邮件地址)替换所有这些文档中的这个字符串。 (要清楚:要查找的字符串和替换它的字符串在所有情况下都是相同的。)
理想情况下,我希望能够为所有文件类型执行此操作,但如果只能使用.doc和.docx,则至少可以解决问题的大部分。
如果可能的话,我也不想安装MS Word,但是我知道这可能是必要的。
谢谢!
答案 0 :(得分:0)
您可以将Value转换为VarBinary,然后替换该值。使用下面的链接来替换varbinary值:
答案 1 :(得分:0)
您可以Managing FILESTREAM Data by Using Win32 API将BLOB变为变量。 这样您就可以在变量中获取BLOB的内容,就像在记事本中打开它一样。使用“替换”更新.DOC,.DOCX和.RTF文件。我不知道如何更新PDF。
此链接包含C#代码,用于将BLOB加载到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);