3

我正在尝试从不安全的 SQL CLR 程序集中流式传输 FILESTREAM 数据。

连接字符串是

Data Source=LAPTOP2\SQLEXPRESS;Initial Catalog=test;Integrated Security=True;Enlist=False

创建一个新SqlFileStream的(SqlTransaction当然是在 a 内)时,我得到:

不支持该请求

OpenSqlFilestream.

所以我决定尝试 native OpenSqlFilestream,但随后我得到一个无效的句柄(-1),同时GetLastWin32Error返回相同的句柄:

不支持该请求 ( ERROR_NOT_SUPPORTED)

我也试过SqlContext.WindowsIdentity.Impersonate()没有明显效果。

我找不到任何引用此限制的文档。真的不支持吗?如果不支持,是否有充分的理由?有谁知道解决方法?

4

1 回答 1

-1

对于访问外部资源,如果您对程序集使用 external_access 或不安全权限,则需要对数据库设置 trustworthy ,因为否则 SQL 服务器实际上不会信任您的代码并且不会让它离开实例。对于文件访问(读取),我使用

            System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
            using (StreamReader reader = new StreamReader(FilePath, Encoding.Default))
            {

                string line;
                string allLine = "";

                while ((line = reader.ReadLine()) != null)
                {

                    allLine += line;

                }

            }

并用于文件写入

FileStream aFile = new FileStream(path, FileMode.Append, FileAccess.Write);
        StreamWriter sw = new StreamWriter(aFile, Encoding.Default);

        sw.Write(FilecontentsTOWrite);
        sw.Close();
        aFile.Close();
于 2013-03-13T07:03:14.033 回答