在谷歌进行了一个多小时的研究后,我觉得我更加困惑......我想
a)通过存储过程从sql server生成一个文本文件(.txt或.doc .pdf)。该文件包含一些简单布局格式的表数据
然后
b)将此文件打印到网络打印机。
以上所有通过代码。是否可能?有任何想法吗?
提前Thanx!
答案 0 :(得分:0)
您可以使用EXEC @rc = master.dbo.xp_cmdshell并调用exe来打印文件
答案 1 :(得分:0)
我决定分享我的实施,因为我努力寻找合适的解决方案
a)借助bcp实用程序将表数据提取到一个简单的.txt文件中。 在存储过程内部编写类似于
的内容EXEC xp_cmdshell 'bcp "SELECT * FROM [yourDatabase]..[yourTable]" queryout "C:\Folder\archive.txt" -T -w -t ,'
我使用“,”作为字段终止符。 您可以在此处阅读有关bcp参数的更多信息http://msdn.microsoft.com/en-us/library/ms162802.aspx
b)现在我有原始数据,我想打印它。我已经实现了一项服务,只检查是否创建了一个新文件。这是一个很好的教程http://midnightcubicle.wordpress.com/2011/04/25/creating-windows-service-in-c/
该服务调用一个新进程,该进程运行执行该作业的.exe文件。
有些事情需要注意:
- 通常在本地运行服务。如果要打印,请在“用户模式”下运行服务 通过services.msc
检查您的服务属性- 从bcp中提取的数据采用“原始”格式,因此如果您想为文本提供一个漂亮的布局,您必须使用StreamReader读取其内容,将其数据保存在内存中(例如列表中的对象 - 每行都是object-each field a property)然后使用string.Format和其他格式化技术。
- 您可能会在Windows控制台和打印机中看到完全不同的结果。这是因为您的控制台使用固定宽度字体,而打印机没有(至少默认情况下)。因此,空间占用的打印机占用的空间较少,而且您的字母会根据实际宽度占用更多或更少的空间。请使用Lucida Console或其他固定宽度字体。