问题标签 [sqlfilestream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2148 浏览

entity-framework - GET_FILESTREAM_TRANSACTION_CONTEXT() 为空

我在从FILESTREAM varbinary(max)列中获取文件时遇到问题。

我使用这个将它添加到一个表中:

我使用实体框架插入图片。但是当我尝试查询时,GET_FILESTREAM_TRANSACTION_CONTEXT()返回NULL. 可能有什么问题?

在此处输入图像描述

0 投票
1 回答
90 浏览

sql - SQL Server BLOB 与文件链接

我打算从公共文件夹中组织图片在 SQL Server 中的存储。我想把它作为 BLOB 来做。我在互联网上读到,如果源文件夹中的任何文件被意外删除,可能会导致数据库故障。这是对的吗?有人遇到过这个问题吗?源文件夹是否应该完全保持不变?非常感谢。

0 投票
0 回答
1427 浏览

c# - SqlFileStream——Win32Exception:“访问被拒绝”——模拟

我的目标是拥有一个附件管理器,它 (1) 按照设计有效地使用SQL FILESTREAM,(2) 将对 SQL FileTable 及其底层 FILESTREAM Windows 目录的访问限制为两个 Active Directory 帐户之一(由网络提供的凭据) /app.config 文件),以及 (3) 有效地忽略当前 Windows Auth 用户对于包含此库的任何站点或应用程序。

我已经看过很多关于这个问题的帖子,我相信我已经尝试了几乎所有我在他们身上找到的所有建议,但仍然几乎没有成功。

我有:

  1. 在我的连接字符串中激活了集成安全性:"Server={server};Database=AttachmentsGlobal;User ID={domain}\\{user};Password={password};Trusted_Connection=False;Integrated Security=true;"
  2. 假设同一用户通过修改文件夹权限对运行 SQL Server 2012 的 Windows Server 2012 上的 FileTable 目录进行 RW 访问。
  3. filestream授予用户对文件表和列的选择、更改、更新、插入和删除权限。
  4. 实现了一个我在网上找到的自定义模拟类,以在调用SqlFileStream对象时模拟同一个用户(见下文)。
  5. 尝试在 SQL Server 端查找错误。我在事件查看器中所能找到的只是我在下面尝试的模拟成功地登录了用户。
  6. 确保在 SQL Server 的 FILESTREAM 设置中启用了“允许远程连接”。

每当我禁用下面的using(Impersonator){}块时它就可以工作SaveFile,否则它会失败。当我在本地调试时,它似乎也忽略了连接字符串:我的用户帐户可以访问附件文件夹,因为我是管理员,但是当我将连接字符串更改为明确无权访问的用户时,它仍然可以正常上传. 我假设这是将当前应用程序用户的凭据传递给服务器并忽略提供的用户的“集成安全性”设置。我不确定如何很好地测试这一点,没有以另一个用户身份运行 Visual Studio(我已经尝试过,但它失败了)。

请告诉我,我正在做一些愚蠢而愚蠢的事情,并且我相当接近解决方案。这个令人难以置信的模糊“访问被拒绝”错误让我发疯!谢谢。

C#:

模仿者类在这里找到

SQL:

例外:

0 投票
1 回答
959 浏览

sql-server - 当表具有 FILESTREAM 列时重命名 ROWCOLGUID 列

我有一个用于存储带有 FILESTREAM 列的文档内容的表,另一个列是 ROWGUIDCOL 列(当您有 FILESTREAM 列时需要)。我想将此表及其现有数据迁移到一个稍微新的结构中,作为代码重构的一部分,以便 2 个不同的项目可以重用代码来管理他们的文档记录。

问题是我想重命名 ROWGUIDCOL 列,以便两个项目的文档表具有相同的列定义。

我不能使用 sp_rename,因为它不适用于 ROWGUIDCOL 列。

我无法删除现有的 ROWGUIDCOL 列(然后添加替换),因为我收到错误消息“具有 FILESTREAM 列的表必须具有具有 ROWGUIDCOL 属性的非空唯一列。”

我无法添加新的 ROWGUIDCOL 列(然后删除多余的原始列),因为我收到错误“指定为 ROWGUIDCOL 的重复列”

这个问题有什么解决办法吗?我是否必须备份所有文档内容(FILESTREAM 列)并首先删除它,然后更改 ROWGUIDCOL,然后将 FILESTREAM 内容放回原处?

0 投票
0 回答
1094 浏览

sql-server - 从 .mdf 文件附加 SQL Server 数据库时出错(配置了文件流)

我有一个带有filesteam的SQL Server 2014实例。最近机器感染了病毒,基本上把所有可以修改的文件都解密了,所以SQL Server就坏了。机器管理员给了我们数据库的 .mdf 和 .ldf 文件形式的备份,没有 .bak 文件,他基本上只是保存磁盘上的内容,而不是进行 SQL Server 备份。无论如何,我已经在该机器上安装了一个新的 SQL Server 2014 实例(打开了文件流),我正在尝试附加恢复的 .mdf 文件。如果我使用这个脚本:

我收到以下错误消息:

所以它基本上试图引用被破坏的文件流的位置(那里的数据被病毒解密)。但是,ABC.FS 文件夹存在,所以我不知道为什么会显示这样的消息。也许它指的是这个文件夹包含的一些文件流文件?如果我删除所有内容并将此文件夹留空,则会引发相同的错误。

我还尝试了另一个脚本,我尝试在其中创建一个新的 Filestream 目录(脚本的其余部分与上面相同):

这给了我以下错误:

我想我已经添加了所有可能的用户,包括运行 SQL Server 的用户,以完全控制这个文件夹,但这无济于事。

我还要指出,我不想恢复文件流包含的任何数据,这已经不复存在了。我只想能够从 .mdf 文件中附加这个数据库。

0 投票
1 回答
277 浏览

c# - SQL Server 2008 文件流读入网页

我有一个启用了文件流的 SQL Server 表。我可以在这里上传文件并进行更新。如何将这些文件读入 .aspx 网页?文件就是.pdf文件。

每行有 2 个文件关联。

我正在将该行读入 .aspx 页面,并且在底部我希望文件在另一个下方打开。这是为了让用户打印文件所在的行。

我已经检查了@dinglemeyer 建议的代码。我确实想将我的pdf转换为图像。我假设有一个简单的方法:

0 投票
1 回答
76 浏览

vb.net - SqlFileStream 在单独的线程中写入不起作用

使用 Sql FILESTREAM 进行 Web 应用程序的学习和测试。客户端从网页上传一个大文件,这需要“X”时间,完全上传后显示 100% 完成。但是,非常大的文件也需要时间让 SqlFileStream 写入文件系统,所以我想分拆一个线程来完成该部分。我得到的代码似乎工作正常,但文件流文件中没有数据。

我将初始记录创建包装在它自己的事务范围中,并在线程中使用单独的事务范围。在线程例程中,我有适当的 PathName() 和 TransactionContext 但我假设我在使用线程时遗漏了一些东西。

我已经注释掉了正常工作的正常 SqlFileStream 调用。你能看出我在这里做的有什么问题吗?

0 投票
0 回答
287 浏览

sql - 为什么将 FILESTREAM 列更改为不为空重复文件系统数据?

我有一个在 varbinary(max) 列中保存文件数据的表,并且正在将其转换为使用 FILESTREAM 列以便将数据保存在文件系统上。

作为其中的一部分,我有一个 SQL 更新脚本,它添加了新的 FILESTREAM 列:

然后我将旧文件数据迁移到新的数据列。这会将文件数据保存到大小为 20GB 的磁盘。

然后我更改该列,使其不为空

但这会在磁盘上创建文件流数据的新副本(在文件组位置的新文件夹中),给我留下另外 20GB 的副本。

我很好奇为什么将列更改为不为空的行为会重复数据?如果它是一个新列并因此复制数据是有意义的,但是在其他所有内容保持不变的情况下,仅复制现有数据几乎没有意义——更不用说复制价值 20GB 的文件所需的时间了。

我可以将列添加更改为具有默认值,这不会导致重复:

然后

但很好奇为什么会发生这种情况。

0 投票
2 回答
2131 浏览

sql-server - .NET Core 对 SQL Server FILESTREAM 的支持

我正在将现有应用程序升级到 .NET Core (DNX SDK 1.0.0-rc1-update2),它使用 SQL Servers FILESTREAM 功能将大型 BLOB 读取/写入数据库。它使用 SqlFileStream 类来实现这一点,但它似乎在 .NET Core 中不可用。这是我在 project.json 中的引用:

我试过搜索 SO 和 Google,两者都没有关于这个主题的内容。

有人可以确认它是否真的不可用,或者它是否在我不知道的另一个包裹中?

0 投票
1 回答
274 浏览

sql-server - 使用 SQLFileStream 并发读取?

将 .Net 4.52 和 SQL Server 2014 与 FILESTREAM 一起使用

我们有一个 web 服务在并发读取时失败,并显示“System.InvalidOperationException:进程无法访问指定的文件,因为它已在另一个事务中打开。”

我已经隔离了代码以在测试程序中重现故障,该程序生成 10 个并发任务,这些任务使用 IsolationLevel.ReadCommitted 和 IO.FileAccess.Read 读取相同的数据。我的理解是数据库和文件系统都会有共享锁,不应该有“阻塞”。

只需一项任务,代码就可以始终如一地工作。有时它适用于 2-3 个任务。对于 10 个任务,代码几乎总是失败 - 每隔一段时间它就会工作。我考虑过其他程序员可能正在访问数据,因为数据库位于我们的开发服务器之一上,但这并不能解释 10 个任务几乎一致的失败。

任何有关可能导致失败的建议将不胜感激!

驱动测试的代码:

被测类:

公共类 TestSqlFileStream

结束类

更新:我看过这个问题,但问题不同,因为它们在事务中拆分为并行:线程和 SqlFileStream。该进程无法访问指定的文件,因为它已在另一个事务中打开 在我的示例中,每个任务都启动自己的事务。

Update2当我在事务中的断点处停止并在查询窗口中运行 DBCC OPENTRAN 时,结果是“没有活动的打开事务”似乎 SqlConnection.BeginTransaction 实际上并没有在数据库中打开事务。

Update3还从事务日志中读取(在命名事务之后):

日志中没有显示我提供的名称的交易。