我有一个UI前端,可以与SQL Server数据库进行对话和操作,其中一件事就是对数据库中的数据运行报告。
此UI可以安装在多台计算机上,到目前为止我只是将报告保存在安装文件夹中,但这意味着每次添加新报告时都必须手动复制到每一台UI安装在那里。
我在考虑将.rpt文件存储在数据库本身(As Blobs)中,并在需要时使用某种机制让UI获取它们,以此作为集中报告和消除此问题的方法。
是否有人试过这个,并且运作良好?或者,如果你还没有,你能想到在继续前进之前我应该考虑的任何事情吗?您能想到的任何提示,技巧或警告可能对我有帮助吗?
答案 0 :(得分:3)
好问题!这有点巧合,因为我们实际上是在过去的六个月里实现了这一点。
正如您所建议的,我们将rpt文件存储在数据库中,但在Server 2005中将其作为Image类型执行。它运行得很好,就数据库而言,确实没有任何警告会浮现在脑海中。
显然,您访问此信息的方式随API而变化。如果您正在使用C#,则转换为使用 BinaryReader 加载rpt文件,获取字节数组。然后可以通过存储过程等将字节数组传递给数据库。
我意识到你是专门询问blob和Server 2008,但是这在Server 2005和Server 2008中都适用。希望这会有点光明。
如果您需要更具体的细节,我很乐意与您分享!
答案 1 :(得分:1)
这是Paul Randal(他写过部分DBCC!)的精彩播客,他们在sql server 2008中讨论了处理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)。
答案 2 :(得分:1)
好的,我们现在都可以轻松地将BLOB存储在SQL SERVER,ORACLE,SQLITE,MYSQL Server以及任何其他有价值的数据库中。我想知道的是,你从数据库中获取字节数组后,你是如何创建报告的?
我想做同样的事情,但我能想到的唯一一件事就是从数据库中提取文件,在Temp文件夹中创建一个物理文件,然后使用新文件的物理地址来创建水晶报告。有没有办法从内存流或字节数组创建Crystal报表?
答案 3 :(得分:-1)
.RPT文件可以通过将其键入为image来存储在数据库(sql)中。将字节数组存储到数据库中,然后将其作为流检索。(提示:将其视为图像文件。)