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

解决方案 »

  1.   

    SQL 2008没用过。
    没有权限?
    1.直接在管理器中运行试试。
    2.如果是vista以上操作系统,试试以管理员身份运行程序
      

  2.   


    在SQL服务器上用管理器也打不开那个共享文件.是管理员身份
      

  3.   

    那在IT-211机上,看你的SQLEXPRESS共享目录,有没有写你权限
      

  4.   


    在服务器上没找到  SQLEXPRESS共享目录 ?keiy能说详细些吗
      

  5.   

    \\IT-211\SQLEXPRESS\v1\Archive\dbo\Records\Chart\EAD5D3C5-8AD5-49A6-B494-11B49501B4C6 
    我理解:IT-211应该是机器吧,后面的SQLEXPRESS是共享目录
    如果你是同一台机上做的,看你的机器名是否为IT-211,并看下是否有SQLEXPRESS共享目录
    我不清楚v1\Archive\dbo\Records\Chart\EAD5D3C5-8AD5-49A6-B494-11B49501B4C6是否是自动生成的,如果不是还要手工建该目录
      

  6.   

    这个共享目录不需要用户去共享,因为它由SQL SERVER内部管理
    对于写内容到服务器上,也是由sqlncli里的API去负责
      

  7.   

    1、確認一下sql configuration management中sql server及sql agent登入身份; 
    2、確認遠端機器中的服務——netlogon是否啟動若僅僅是本機使用,只需確認第一條,把它改為本地用戶,不用網絡用戶
      

  8.   

    如果是这样,看看SQL的连接方式,可能是命名管道,记得以前的版本有连接管理器,看一下命名管道有没有开
      

  9.   


    \\IT-211\SQLEXPRESS\v1\Archive\dbo\Records\Chart\EAD5D3C5-8AD5-49A6-B494-11B49501B4C6 
    这个路径是SQL自动生成的,并且是共享的(这是SQL2008文件流的新特性)。
    但是用资源管理器是访问不了的,或许这是专门为程序所留的。
      

  10.   


    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.
      

  11.   

    不好意思,下午外出了.实现在Win32下读写SQL 2008的文件流中的文件.