Экспорт набора данных в Excel - PullRequest
0 голосов
/ 27 марта 2009

У меня есть следующий фрагмент кода, который я использовал в прошлом для экспорта набора данных, сгенерированного из хранимой процедуры '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

Я пытаюсь повторно использовать этот код в другом, но похожем приложении, но у меня возникла проблема. Предыдущее использование этого кода использовалось для статической таблицы в нашей базе данных, созданной хранимой процедурой. И хотя это в основном остается тем же для нового приложения, требования теперь требуют, чтобы хранимая процедура имела входной параметр, который должен быть введен пользователем (через VB.net) до выполнения. Для небольшой истории вы можете проследить этот завершенный процесс здесь - Добавление параметра в хранимую процедуру.

Само приложение фактически возвращает полностью заполненный набор данных, и я бы хотел, чтобы наши пользователи имели возможность экспортировать этот сгенерированный набор данных в Excel. Итак, я настроил вашу опытную кнопку «EXPORT ME», чтобы начать грязную работу.

При поднятии мероприятия; Откроется Excel и только имена моих столбцов повторяются по всему листу. Но, и вот в чем проблема, ячейки, представляющие данные строки - пустые.

Я пришел к выводу (я допускаю, что я могу ошибаться в этом предположении), что строки не заполняются из-за того, что хранимой процедуре нужен входной параметр, чтобы сделать свое дело, и без этого параметра нет никаких данных для возврата для каждой строки. В основном это означает, что мой код просто не будет работать для того, что я пытаюсь сделать.

Если я прав в своих предположениях, любые идеи относительно того, как я могу вставить этот параметр в мой код выше, чтобы строки были сгенерированы правильно.

Если я ошибаюсь, то любая информация о том, что не так с моей логикой или самим кодом, была бы очень благодарна.

Спасибо

Jasoomian


Stan

Вот код, который генерирует набор данных:

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 голосов
/ 27 марта 2009

Ваш вывод определенно ошибочен - после заполнения набора данных параметр больше не является фактором. Я не вижу ничего явно плохого в вашем коде, и, как вы сказали, он работал в другом месте. Я бы начал с установки точки останова и проверки того, что набор данных содержит строки, как вы ожидаете.

...