怎么将SQL Server2008保存的varbinary(MAX)类型文件保存到某个文件夹当中
如何将SQL Server2008保存的varbinary(MAX)类型文件保存到某个文件夹当中请教各位。
如何将SQL Server2008保存的varbinary(MAX)类型文件保存到某个文件夹当中请教各位。
添加varbinary(MAX)数据类型的文件(即上传)SQL代码为:
INSERT INTO modelDB_TAB(MODELName,GUID,MODELFILETYPE,MODELSIZE,UPLOADDATE,TEXT,MODELData) SELECT 'Drivers.mo' AS MODELName,NEWID() AS GUID,'Modelica' AS MODELFILETYPE,'617KB' AS MODELSIZE,GETDATE() AS UPLOADDATE,'驱动器' AS TEXT,*FROM OPENROWSET(BULK N'E:\program\database\Drivers.mo',SINGLE_BLOB) AS MODELData;
现在想保存到某个位置(即下载),保存的代码为:
EXEC master..xp_cmdshell 'bcp "SELECT MODELData FROM MODELDB.dbo.modelDB_TAB WHERE MODELName =Drivers.mo" queryout "E:\program\document\Drivers.mo" -T -c -U "modeldbaccess" -P "modeldbaccess"'
但是无论直接在SQL Server 2008中执行代码还是用VC执行SQL代码,保存之后的文件数据都会有所丢失,不是之前保存的文件,求问有木有解决办法,或者更好的方法保存varbinary(MAX)文件,然后可以下载。现在求高人指导,谢谢。
------解决方案--------------------
上传下载文件,读写varbinary(MAX)类型的字段,须用ADO对象的相应方法,
用纯SQL的方法应该是无法实现的.
------解决方案--------------------
2008可以考虑用filestream,不过有一定的限制条件
------解决方案--------------------
filestream可以直接在T-SQL中读取,如果你还要转换成二进制、十六进制,那用filestream貌似没多大用处
------解决方案--------------------
filestream主要是方便SQL Server直接读取文件,至于下载、保存这些东西,不是它的强项。或者你就直接用前端程序来读取路径再保存路径到数据库,而不保存具体信息
------解决方案--------------------
我很久没做.net了,基本上不记得了,你百度一下吧。这个东西不难
如何将SQL Server2008保存的varbinary(MAX)类型文件保存到某个文件夹当中请教各位。
添加varbinary(MAX)数据类型的文件(即上传)SQL代码为:
INSERT INTO modelDB_TAB(MODELName,GUID,MODELFILETYPE,MODELSIZE,UPLOADDATE,TEXT,MODELData) SELECT 'Drivers.mo' AS MODELName,NEWID() AS GUID,'Modelica' AS MODELFILETYPE,'617KB' AS MODELSIZE,GETDATE() AS UPLOADDATE,'驱动器' AS TEXT,*FROM OPENROWSET(BULK N'E:\program\database\Drivers.mo',SINGLE_BLOB) AS MODELData;
现在想保存到某个位置(即下载),保存的代码为:
EXEC master..xp_cmdshell 'bcp "SELECT MODELData FROM MODELDB.dbo.modelDB_TAB WHERE MODELName =Drivers.mo" queryout "E:\program\document\Drivers.mo" -T -c -U "modeldbaccess" -P "modeldbaccess"'
但是无论直接在SQL Server 2008中执行代码还是用VC执行SQL代码,保存之后的文件数据都会有所丢失,不是之前保存的文件,求问有木有解决办法,或者更好的方法保存varbinary(MAX)文件,然后可以下载。现在求高人指导,谢谢。
------解决方案--------------------
上传下载文件,读写varbinary(MAX)类型的字段,须用ADO对象的相应方法,
用纯SQL的方法应该是无法实现的.
-- 下载文件
Dim adoCn As ADODB.Connection
Set adoCn = New ADODB.Connection
adoCn.Open "Provider=SQLOLEDB.1;Server=[服务器名];Initial Catalog=[数据库名];UID=[帐号];PWD=[密码]"
Dim adoRs As ADODB.Recordset
Set adoRs = New ADODB.Recordset
adoRs.Open " SELECT MODELData FROM MODELDB.dbo.modelDB_TAB WHERE MODELName=Drivers.mo", adoCn, adOpenStatic, adLockOptimistic
Dim x As ADODB.Stream
Set x = New ADODB.Stream
x.type = adTypeBinary
x.Mode = adModeReadWrite
x.Open
x.Write adoRs.Fields(1)
x.SaveToFile [下载路径+文件名], adSaveCreateOverWrite
------解决方案--------------------
2008可以考虑用filestream,不过有一定的限制条件
------解决方案--------------------
filestream可以直接在T-SQL中读取,如果你还要转换成二进制、十六进制,那用filestream貌似没多大用处
------解决方案--------------------
filestream主要是方便SQL Server直接读取文件,至于下载、保存这些东西,不是它的强项。或者你就直接用前端程序来读取路径再保存路径到数据库,而不保存具体信息
------解决方案--------------------
我很久没做.net了,基本上不记得了,你百度一下吧。这个东西不难