繁体   English   中英

将数据集导出到Excel

[英]Exporting Dataset to Excel

我过去有以下代码将从存储过程“ HISTORICAL_COSTS”生成的数据集导出到Excel。

        Dim c As Long = 1
        For Each dc As DataColumn In Me.WOCostDataSet. & _
        HISTORICAL_COSTS.Columns
            .Cells(1, c).Value = dc.ColumnName.ToString
            .Cells(1, c).Font.Bold = True
            c += 1
        Next

        Dim i As Long = 2
        For Each dr As DataRow In Me.WOCostDataSet.HISTORICAL_COSTS.Rows
            c = 1
            For Each dc As DataColumn In Me.WOCostDataSet. & _
            HISTORICAL_COSTS.Columns
                .Cells(i, c).Value = dr.Item(dc.ColumnName).ToString
                c += 1
            Next
            i += 1
        Next

我试图在一个不同但相似的应用程序中重用此代码,但是,我遇到了一个问题。 此代码的先前用法是在存储过程生成的dBase中的静态表上使用的。 尽管对于新应用程序这基本上是相同的,但现在的要求是存储过程必须在执行之前由用户(通过VB.net)输入一个输入参数。 有关一些背景知识,您可以在此按照已完成的过程进行- 向存储过程中注入参数。

实际上,应用程序本身确实会返回一个完全填充的数据集,我希望我们的用户能够将生成的数据集导出到Excel。 因此,我设置了您的原型“ EXPORT ME”按钮来开始工作。

引发事件时; Excel将打开,并且在整个工作表中重申我的列名。 但是,这就是问题所在,代表行数据的单元格为空。

我得出的结论(我确实承认在这种假设下可能错了),因为存储过程需要输入参数来执行操作,所以没有填充行,而没有该参数就没有t每行要返回的任何数据。 基本上,这意味着我的代码对我要执行的操作无效。

如果我的假设是正确的,那么关于如何将上述参数添加到我的代码中的任何想法都可以使行正确生成。

如果我错了,那么对我的逻辑或代码本身有问题的任何输入,将不胜感激。

谢谢,

茉莉花


斯坦,

这是生成数据集的代码:

Try
        Dim FBConn As FbConnection
        Dim MyConnectionString As String

        MyConnectionString = "datasource=" _
                        & MyServer & ";database=" _
                        & TextBox4.Text & ";user id=SYSDBA;password=" _
                        & MyPassword & ";initial catalog=;Charset=NONE"

        FBConn = New FbConnection(MyConnectionString)
        Dim FBCmd As New FbCommand("HISTORICAL_COSTS", FBConn)

        FBCmd.CommandType = CommandType.StoredProcedure
        FBCmd.Parameters.Add("@I_PN", FbDbType.VarChar, 40)
        FBCmd.Parameters("@I_PN").Value = TextBox1.Text.ToUpper

        Dim FBadapter As New FbDataAdapter(FBCmd)
        Dim dsResult As New DataSet
        FBadapter.Fill(dsResult)

        Me.HISTORICAL_COSTSDataGridView.DataSource = dsResult.Tables(0)

        Dim RecordCount As Integer
        RecordCount = Me.HISTORICAL_COSTSDataGridView.RowCount
        Label4.Text = RecordCount

    Catch ex As System.Exception
        System.Windows.Forms.MessageBox.Show _
        ("There was an error in generating the DataStream, " & _
        "please check the system credentials and try again.  " & _
        "If the problem persists, please contact your friendly " & _
        "local IT department.")
    End Try

Stackoverflow恳切地建议我向回答我问题的任何人提供赏金,但是,由于我没有足够的REP来创建足够的赏金-我一直以来的感激之心能赢得任何编码爱吗?

一些快速更新:

我通过更改存储过程以将结果注入到新的单独表中来测试了我的应用程序,然后对该表运行excel导出-效果很好。 但是,由于许多人将同时使用该应用程序,因此这不是可行的解决方案。

因此,我重新相信该数据集实例存在问题,需要为导出正确运行的参数。

很高兴尽我所能回答所有问题。

您的结论肯定是错误的-一旦填充了数据集,参数就不再是一个因素。 我没有发现您的代码有任何明显的错误,并且正如您所说的,它在其他地方也有效。 我将从设置断点开始,并确保数据集包含您期望的行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM