我正在尝试从不安全的 SQL CLR 程序集流式传输 FILESTREAM 数据。
连接字符串是
Data Source=LAPTOP2\SQLEXPRESS;Initial Catalog=test;Integrated Security=True;Enlist=False
当创建一个新的 SqlFileStream
时(当然是在 SqlTransaction
中),我得到:
The request is not supported
在 OpenSqlFilestream
。
所以我决定尝试原生 OpenSqlFilestream
,但随后我得到一个无效句柄 (-1) 而 GetLastWin32Error
返回相同的句柄:
The request is not supported (
ERROR_NOT_SUPPORTED
).
我也试过 SqlContext.WindowsIdentity.Impersonate()
没有明显效果。
我找不到任何引用此限制的文档。真的不支持吗?如果不支持,是否有充分的理由?有人知道解决方法吗?
最佳答案
要访问外部资源,如果您对程序集使用 external_access 或 unsafe 权限,则需要将 trustworthy 设置为数据库,否则 SQL Server 根本不会信任您的代码,不会让它离开实例。 对于文件访问(阅读),我使用了
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();
关于sql-server - 从 SQL CLR 程序集访问 FILESTREAM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12986909/