0

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

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

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

4

1 回答 1

0

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

于 2009-03-27T17:32:39.593 回答