5

我有一个 UI 前端,它与 SQL Server 数据库对话和操作,它可以做的一件事是运行关于数据库中数据的报告。

此 UI 可以安装在多台计算机上,到目前为止,我只是将报告保存在安装文件夹中,但这意味着任何时候添加新报告都必须手动复制到每个单独的 UI 安装那里。

我正在考虑将 .rpt 文件存储在数据库本身(作为 Blob)中,并有一些机制让 UI 在需要时获取它们,作为集中报告并消除此问题的一种方式。

有没有人试过这个,效果好吗?或者,如果您还没有,您能想到在继续进行此操作之前我应该​​考虑的任何事情吗?您能想到的任何提示、技巧或警告对我有帮助吗?

4

4 回答 4

3

好问题!这有点巧合,因为我们实际上只是在过去六个月内实现了这一点。

正如您所建议的,我们将 rpt 文件存储在数据库中,但在 Server 2005 中将其作为图像类型进行。它工作得很好,就数据库而言,确实没有想到任何警告。

显然,您访问此信息的方式会随着 API 的变化而变化。如果您使用的是 C#,这将转换为使用BinaryReader加载 rpt 文件,获取一个字节数组。然后可以通过存储过程等将这个字节数组传递给数据库。

我意识到您是在专门询问 blob 和 Server 2008 ,但这适用于 Server 2005 和 Server 2008。希望这能带来一点启示。

如果您需要更具体的细节,我很乐意分享!

于 2008-10-09T05:28:35.603 回答
1

这是 Paul Randal 的精彩播客(他编写了 DBCC 的部分内容!),他们在其中讨论了 sql server 2008 中用于处理 blob 的新文件流功能,但他们也讨论了作为 blob 工作和不工作的文件的大小谈话的一部分。我想它会对你有所帮助。 http://www.runasradio.com/default.aspx?showNum=74

我刚刚发现 Paul 编写的 25 页 FILESTREAM 白皮书已在 MSDN 上发布。 http://msdn.microsoft.com/en-us/library/cc949109.aspx

根据本白皮书后面引用的研究,小于 256 KB(如小部件图标)的 BLOB 最好存储在数据库中,大于 1 MB 的 BLOB 最好存储在数据库外部。对于大小在 256 KB 和 1 MB 之间的数据,更高效的存储解决方案取决于数据的读取与写入比率以及“覆盖”率。仅在数据库中存储 BLOB 数据(例如,使用 varbinary(max) 数据类型)限制为每个 BLOB 2 GB。

于 2008-10-09T02:47:50.187 回答
1

好的,现在我们都可以轻松地将 BLOB 存储在 SQL SERVER、ORACLE、SQLITE、MYSQL Server 和任何其他有价值的数据库中。我想知道的是,在您从数据库中获取字节数组之后,您是如何创建报告的?

我想做同样的事情,但我唯一能想到的就是从数据库中提取文件,在 Temp 文件夹中创建一个物理文件,然后使用新文件的物理地址创建水晶报表。有没有办法从内存流或字节数组创建水晶报表?

于 2008-10-23T15:33:49.387 回答
-1

.RPT 文件可以通过将其类型为图像存储在数据库(sql)中。将字节数组存储到数据库中,然后将其作为流检索。(提示:将其视为图像文件。)

于 2015-03-12T07:56:02.860 回答