SQL 2008的一个新特性,用FILESTREAM 存放文件. 可以用win32 形式读写文件,能大量减少客户端和服务器端的资源.于是就测试,在测试时遇到下面一个问题.先得到该文件的路径:
DECLARE @filePath varchar(max)
SELECT @filePath = Chart.PathName() FROM Archive.dbo.Records WHERE SerialNumber = 3
PRINT @filepath
//比如 \\IT-211\SQLEXPRESS\v1\Archive\dbo\Records\Chart\EAD5D3C5-8AD5-49A6-B494-11B49501B4C6但这个路径却不能操作文件,浏览器访问提示没有权限.
Delphi代码var
ContextSize: Integer;
Context: array[0..255] of Byte;
FilePath: WideString;
Handle: HFILE;
begin
with ADOQuery1 do
try
Active := false;
Close;
sql.Clear;
sql.add('SELECT GET_FILESTREAM_TRANSACTION_CONTEXT() as k1,' +
' chart.PathName() as k2 FROM records WHERE serialnumber = 4');
Open;
Active := true;
except
Application.MessageBox('失败,请确认有数据!', '提示', MB_ICONWARNING);
end; ContextSize := (ADOQuery1.Fields[0] as TBytesField).Size; //128
(ADOQuery1.Fields[0] as TBytesField).GetData(@Context);
FilePath := ADOQuery1.Fields[1].Value; Handle := OpenSqlFilestream(PWideChar(FilePath), SQL_FILESTREAM_READWRITE,
0, @Context, ContextSize, nil); //试着去判断文件大小 为-1 ,读出的内容是空.
相关网站:
用FILESTREAM在性能上的优越性
http://blog.csdn.net/chen_xizhang/archive/2009/07/29/4390893.aspx微软件介绍怎么用Win32 控制文件流中的文件
http://msdn.microsoft.com/zh-cn/library/cc645940(SQL.105).aspx国外一论坛的讨论
http://www.nldelphi.com/Forum/showthread.php?t=35166
DECLARE @filePath varchar(max)
SELECT @filePath = Chart.PathName() FROM Archive.dbo.Records WHERE SerialNumber = 3
PRINT @filepath
//比如 \\IT-211\SQLEXPRESS\v1\Archive\dbo\Records\Chart\EAD5D3C5-8AD5-49A6-B494-11B49501B4C6但这个路径却不能操作文件,浏览器访问提示没有权限.
Delphi代码var
ContextSize: Integer;
Context: array[0..255] of Byte;
FilePath: WideString;
Handle: HFILE;
begin
with ADOQuery1 do
try
Active := false;
Close;
sql.Clear;
sql.add('SELECT GET_FILESTREAM_TRANSACTION_CONTEXT() as k1,' +
' chart.PathName() as k2 FROM records WHERE serialnumber = 4');
Open;
Active := true;
except
Application.MessageBox('失败,请确认有数据!', '提示', MB_ICONWARNING);
end; ContextSize := (ADOQuery1.Fields[0] as TBytesField).Size; //128
(ADOQuery1.Fields[0] as TBytesField).GetData(@Context);
FilePath := ADOQuery1.Fields[1].Value; Handle := OpenSqlFilestream(PWideChar(FilePath), SQL_FILESTREAM_READWRITE,
0, @Context, ContextSize, nil); //试着去判断文件大小 为-1 ,读出的内容是空.
相关网站:
用FILESTREAM在性能上的优越性
http://blog.csdn.net/chen_xizhang/archive/2009/07/29/4390893.aspx微软件介绍怎么用Win32 控制文件流中的文件
http://msdn.microsoft.com/zh-cn/library/cc645940(SQL.105).aspx国外一论坛的讨论
http://www.nldelphi.com/Forum/showthread.php?t=35166
解决方案 »
- 有什么办法可以把查找标题包含于'聊天中'的窗体句柄?
- 问一个关于listview的巨难的问题?
- 请教TClientSocket及TServerSocket用法
- 关于动态取数(不急了)
- 请问大家,有谁研究过FastReport的源码,一起讨论一下。
- 如何取到excel工作表中的行数?
- 请问:访问网络邻居时,都用到哪些API
- 用sqlserver数据库,在网络环境中当两个客户端同时对一条记录修改,加入A机器post之后,B再post就不行了。显示无法定位记录的错误。大家
- 请问一下,下面的错误是什么问题??是关于图象保存的问题?
- 调查:诸位最想得到的一个软件(或功能)却又一直没有找到的软件(或功能)是什么?答者给分
- 请教数字转汉字的问题
- 编译通过了,为什么运行的时候就出错,停在
没有权限?
1.直接在管理器中运行试试。
2.如果是vista以上操作系统,试试以管理员身份运行程序
在SQL服务器上用管理器也打不开那个共享文件.是管理员身份
在服务器上没找到 SQLEXPRESS共享目录 ?keiy能说详细些吗
我理解:IT-211应该是机器吧,后面的SQLEXPRESS是共享目录
如果你是同一台机上做的,看你的机器名是否为IT-211,并看下是否有SQLEXPRESS共享目录
我不清楚v1\Archive\dbo\Records\Chart\EAD5D3C5-8AD5-49A6-B494-11B49501B4C6是否是自动生成的,如果不是还要手工建该目录
对于写内容到服务器上,也是由sqlncli里的API去负责
2、確認遠端機器中的服務——netlogon是否啟動若僅僅是本機使用,只需確認第一條,把它改為本地用戶,不用網絡用戶
\\IT-211\SQLEXPRESS\v1\Archive\dbo\Records\Chart\EAD5D3C5-8AD5-49A6-B494-11B49501B4C6
这个路径是SQL自动生成的,并且是共享的(这是SQL2008文件流的新特性)。
但是用资源管理器是访问不了的,或许这是专门为程序所留的。
FILESTREAM Configuration Option in Management Studio Using T-SQL Script: Use the FILESTREAM configuration option to change the FILESTREAM access level for this instance of SQL Server. For example:· In SQL Server Management Studio, click New Query to display the Query Editor.· In Query Editor, enter the following Transact-SQL code:EXEC sp_configure ‘filestream_access_level’, ‘[level_value]’RECONFIGURE· Click Execute.Here, [level_value] can be:0 Disables FILESTREAM support for this instance.1 Enables FILESTREAM for Transact-SQL access.2 Enables FILESTREAM for Transact-SQL and Win32 streaming access.