如何从sql server生成.txt文件然后打印它

时间:2013-01-07 11:58:13

标签: c# sql sql-server-2008

在谷歌进行了一个多小时的研究后,我觉得我更加困惑......我想

a)通过存储过程从sql server生成一个文本文件(.txt或.doc .pdf)。该文件包含一些简单布局格式的表数据

然后

b)将此文件打印到网络打印机。

以上所有通过代码。是否可能?有任何想法吗?

提前Thanx!

2 个答案:

答案 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或其他固定宽度字体。