将数据集导出到Excel

时间:2009-03-27 16:29:10

标签: vb.net excel stored-procedures dataset firebird

我在过去使用了以下一些代码来将从存储过程'HISTORICAL_COSTS'生成的DataSet导出到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)输入输入参数。对于一个小故事,您可以在此处按照完成的流程进行操作 - Injecting a Parameter into Stored Procedure.

应用程序本身确实返回一个完全填充的数据集,我希望我们的用户能够将生成的数据集导出到Excel。所以,我设置了你的原型'EXPORT ME'按钮来开始肮脏的工作。

举起活动;在整个工作表中重复打开Excel并且我的列名称。但是,问题在于,表示行数据的单元格是空白的。

我已经得出结论(我承认在这个假设中我可能错了)由于存储过程需要输入参数才能完成这一事实而没有填充行,并且没有该参数每行没有任何数据返回。基本上意味着我的代码不适用于我想要做的事情。

如果我在我的假设中是对的,那么关于如何将该参数放入上面的代码中以便正确生成行的任何想法。

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

谢谢,

Jasoomian


斯坦,

以下是生成数据集的代码:

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导出 - 它工作正常。但是,由于许多人将同时使用该应用程序,因此这不是一个可行的解决方案。

所以,我回过头来相信这个数据集实例存在问题,需要一个参数才能正确运行导出。

乐意尽我所能回答任何问题。

1 个答案:

答案 0 :(得分:0)

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