在SQL Server管理工作室中,您可以将查询结果输出到网格(默认设置),以便在运行查询时,查询结果直接显示在其下方。或者,您可以将查询结果输出到文件,该文件随时随地生成.RPT文件。
报告文件看起来像这样(在记事本中打开时);
我的问题是,如何在.NET中创建相同类型的文件(相同的文件格式,间距和所有文件)(我使用的是VB.Net)。
这是我到目前为止使用的企业库,但它返回一个数据集,我从中提取数据视图。我可以将dataview转换为文本文件,但该文本文件看起来不像这个报告文件,我甚至不知道它的格式是如何决定的。
`Dim dbCommandWrapper作为DBCommandWrapper
dbCommandWrapper = GlobalDatabase.objDatabase.GetStoredProcCommandWrapper("My_StoredProcedure_Report")
If IsNothing(objGlobalDatabase.objTransaction) Then
Return GlobalDatabase.objDatabase.ExecuteDataSet(dbCommandWrapper).Tables(0).DefaultView()
Else
Return GlobalDatabase.objDatabase.ExecuteDataSet(dbCommandWrapper, objGlobalDatabase.objTransaction).Tables(0).DefaultView()
End If`
答案 0 :(得分:2)
管理结果视图只不过是格式化文本。您需要接收DataTable
,然后
dim columns as new Dictionary(of int, int) ' save col index / col width info
for i as integer = 0 to DataTable.Columns.count - 1
columns.Add(i, 1)
next
dim data as new List(of List(of string))
' preload you values and calculate width
For rows as int = 0 to DataTable.Rows.Count-1
for cols as integer = 0 to DataTable.Columns.Count - 1
dim cl as new List(of string) ' Save your string values here
if not isDbnull(DataTable.Rows(rows)(cols)) Then
dim val as string = convert.toString()(DataTable.Rows(rows)(cols))
if val.Length > columns(cols) Then
columns(cols) = val.Length
end if
cl.Add(val)
else
cl.Add(string.empty)
end if
next
data.Add(cl)
next
现在,打印输出
dim sb as new StringBuilder()
' Do the header
for i as integer = 0 to Datatable.Columns.count -1
sb.Append(Datatable.Columns(i).ColumnName.PadRight(columns(i), "_"))
sb.Append(" ") ' space between columns
next
sb.Append(Environment.NewLine)
' Now Data
for each l as list(of list(of string)) in data
for i as integer = 0 to l.count
sb.Append(l(i).Padright(columns(i)))
sb.Append(" ") ' space between columns
next
sb.Append(Environment.NewLine)
next
现在您拥有包含数据的sb
对象。您现在需要的是使用某种字体显示它,其中每个字符占用相同的宽度,例如Courier New
警告:从内存中键入代码并进行了检查,但应该代表您正在寻找的内容