使用C#将SQL Image字段中的数据保存为pdf,msg,xls,txt文件

时间:2014-09-22 10:23:52

标签: c# sql .net

我在DB中有一个表格,其中包含Image类型的字段。类型图像的字段存储来自附件的数据(从aspx应用程序上传),其可以是pdf,xls,msg,txt等。该表还具有存储附件名称和扩展类型的字段。

我必须将附件保存回我的文件系统,以便该表中的所有行。

我尝试过以下操作,但我没有权限执行以下

DECLARE @ObjectToken INT
EXEC sp_OACreate 'ADODB.Stream', @ObjectToken OUTPUT
EXEC sp_OASetProperty @ObjectToken, 'Type', 1
EXEC sp_OAMethod @ObjectToken, 'Open'
EXEC sp_OAMethod @ObjectToken, 'Write', NULL, Content
EXEC sp_OAMethod @ObjectToken, 'SaveToFile', NULL, 'c:/file.msg', 2
EXEC sp_OAMethod @ObjectToken, 'Close'
EXEC sp_OADestroy @ObjectToken

任何人都可以告诉我如何使用C#保存文件系统的所有附件。我正在考虑使用“保存”按钮构建Windows窗体应用程序。

2 个答案:

答案 0 :(得分:1)

如果您只想使用快速和脏方法的文件,只需使用带有ADO的VBS:

Set BinaryStream = CreateObject("ADODB.Stream")
BinaryStream.Type = 1 ' = adTypeBinary
BinaryStream.Open

Dim UUIDARRAY() 
Redim UUIDARRAY(1000)
strConnection = "Driver={SQL Server};Server=<servername>;Database=<databasename>;Uid=<username>;Pwd=<userpasswor>;"
Set cn = CreateObject("ADODB.Connection")
cn.ConnectionString = strConnection    
cn.Open
If cn.State = 1 Then
    Set objrs=cn.execute( "Select <data> FROM <table> where <something>" )
    Dim error
    While not (objrs is nothing)
        set field = objrs.Fields(0)
        chunk_data = field.GetChunk(65536)
        BinaryStream.Write chunk_data

    Set objrs = objrs.NextRecordSet
    Wend
    cn.close
    BinaryStream.SaveToFile "binarydata.bin", 2 '= adSaveCreateOverWrite'
else
    wscript.echo  "Could not connect"
end if

只需使用此脚本并替换所有&lt; ...&gt;有相关信息。

答案 1 :(得分:0)

在SQL服务器上执行此操作(需要sa权限)

sp_configure

‘show advanced options’, 1

GO

reconfigure

GO