【问题标题】:Exporting Dataset to Excel将数据集导出到 Excel
【发布时间】:2010-10-15 23:36:35
【问题描述】:

我过去曾使用以下代码将存储过程“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)在执行之前输入参数。对于一些背景故事,您可以在此处遵循已完成的过程 - Injecting a Parameter into Stored Procedure.

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

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

我得出的结论是(我承认我在这个假设中可能是错误的)行没有被填充,因为存储过程需要一个输入参数来执行它,并且没有该参数每行没有任何数据要返回。基本上意味着我的代码不适用于我正在尝试做的事情。

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

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

谢谢,

贾苏米安


斯坦,

这是生成数据集的代码:

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

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

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

【问题讨论】:

  • 这对我来说有点模糊。这个参数是从哪里来的?在你根据假设做某事之前,还要确保你的假设是正确的。我的意思是:尝试一些调试,收集确凿的证据。
  • 抱歉信息含糊,我尽量做到详细。无论如何,参数来自 vb 应用程序本身,然后传递到我用来生成 DataSet 的存储过程 HISTORICAL_COSTS。但是,调试仍在继续,因为它已经进行了一天半了 :)

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    • 1970-01-01
    • 2020-04-02
    • 2016-12-14
    • 1970-01-01
    相关资源
    最近更新 更多