如何创建或模仿SQL Server Management Studio查询结果报告

时间:2014-02-17 21:18:37

标签: sql .net vb.net sql-server-2008 enterprise-library

在SQL Server管理工作室中,您可以将查询结果输出到网格(默认设置),以便在运行查询时,查询结果直接显示在其下方。或者,您可以将查询结果输出到文件,该文件随时随地生成.RPT文件。

sql server results to file

报告文件看起来像这样(在记事本中打开时);

report file

我的问题是,如何在.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`

1 个答案:

答案 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

警告:从内存中键入代码并进行了检查,但应该代表您正在寻找的内容