2011-01-12 25 views
1

对于SQL Server 2008,我有一个接受VarBinary参数的存储过程。当参数在内存中时,我想将它写入SQL Server的%temp%目录。内存VarBinary中的TSQL到文本文件?

如何从内存blob(它来自一个C#应用程序的字节[])到文本文件?该blob不存在于任何磁盘驻留表中。

我倾向于让TSQL存储过程调用一个CLR存储过程,目前看起来(大部分)如下所示。

问题#1是我认为inputBytes []卡在8k输入大小。

问题#2是我似乎无法想出一些体面的SQL,将varbinary值作为参数传递,因此我可以在Management Studio或VS DB单元测试中测试此值。

public static void FileWrite(string inputName , byte[] inputBytes) 
using (FileStream fileStream = new  
    FileStream(Environment.GetEnvironmentVariable("TEMP") + "\\" + inputName, 
    FileMode.OpenOrCreate, FileAccess.Write)) 
    { 
     using (BinaryWriter binaryWriter = new BinaryWriter(fileStream)) 
     { 
      binaryWriter.Write(inputBytes); 
    } 
} 

谢谢。

回答

0

如果在C#代码的字节[],你可以很容易地写入文件:

http://msdn.microsoft.com/en-us/library/system.io.file.writeallbytes.aspx

将这项工作吗?

编辑:另一个想法,如果你必须从SQL Server启动文件保存可能会创建一个SQL Server CLR Function。这将允许您从SQL Server执行C#代码。

编辑2:我做了一个谷歌搜索,找到一篇关于CodeProject的文章。在这篇文章中,他们正在压缩和解压缩blob数据。我想这里的诀窍是使用SqlBytes参数类型vs普通旧字节[]。以下是我在阅读文章和更新后的问题后提出的一些(未经测试的)代码:

using System; 
using System.Data; 
using System.Data.SqlClient; 
using System.Data.SqlTypes; 
using Microsoft.SqlServer.Server; 

using System.IO; 
using System.IO.Compression; 

public partial class UserDefinedFunctions 
{ 
    // Setting function characteristics 
    [Microsoft.SqlServer.Server.SqlFunction(IsDeterministic=true, DataAccess=DataAccessKind.None)] 
    public static void fn_WriteToFile(string fileName, SqlBytes blob) 
    { 
     if(blob.IsNull || String.IsNullOrEmpty(fileName)) 
     { 
      return; 
     } 

     String fullFileName = Path.Combine(Environment.GetEnvironmentVariable("TEMP"), fileName); 
     using(FileStream fileStream = new FileStream(fullFileName, FileMode.OpenOrCreate, FileAccess.Write)) 
     using(BinaryWriter binaryWriter = new BinaryWriter(fileStream)) 
     { 
      binaryWriter.Write(blob.Buffer); 
     } 
    } 
}; 

让我知道您的想法。

+0

谢谢你,当你指着我指向CLR sproc时,我自己正在走这条路。我似乎无法弄清楚如何将一个无限大小的VarBinary(Max)并将它作为byte []发送给CLR sproc,以便我可以编写它....时间来编辑我的原始帖子。谢谢。 – Snowy 2011-01-12 04:15:31

相关问题