2009-03-27 6 views
0

J'ai le code suivant que j'ai utilisé dans le passé pour exporter un DataSet généré à partir de la procédure stockée 'HISTORICAL_COSTS' vers Excel.Exportation d'un jeu de données vers 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 

J'essaie de réutiliser ce code d'application d'une autre, mais semblable, mais, je suis en cours d'exécution dans un problème. L'utilisation précédente de ce code a été utilisée sur une table statique dans notre dBase générée par la procédure stockée. Et bien que cela reste fondamentalement le même pour la nouvelle application, les exigences exigent maintenant que la procédure stockée ait un paramètre d'entrée à saisir par l'utilisateur (via VB.net) avant l'exécution. Pour un peu de retour, vous pouvez suivre ce processus ici - Injecting a Parameter into Stored Procedure.

L'application elle-même retourne un ensemble de données entièrement rempli, et j'aimerais que nos utilisateurs puissent exporter ce jeu de données généré vers Excel . Donc, j'ai mis en place votre prototype "EXPORTER MOI" bouton pour commencer le sale boulot.

Lors de l'augmentation de l'événement; Excel s'ouvre et seulement mes noms de colonne sont réitérés dans toute la feuille. Mais, et voici le problème, les cellules représentant les données de ligne - sont vides. Je suis arrivé à la conclusion (j'admets que j'ai peut-être tort dans cette hypothèse) que les lignes ne sont pas peuplées du fait que la procédure stockée a besoin d'un paramètre d'entrée pour faire sa chose, et sans cela paramètre il n'y a pas de données à retourner pour chaque ligne. Fondamentalement, cela signifie que mon code ne fonctionnera pas pour ce que j'essaie de faire. Si j'ai raison dans mes hypothèses, des idées sur la façon dont je pourrais obtenir ce paramètre dans mon code ci-dessus afin que les lignes seront correctement générées. Si je me trompe, eh bien, toute contribution sur ce qui ne va pas avec ma logique ou le code lui-même serait grandement appréciée.

Merci,

Jasoomian


Stan,

Voici le code qui génère l'ensemble de données:

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 suggère gentiment que j'offre une prime à quiconque répond à ma question, mais, comme je n'ai pas assez de REP pour créer une générosité suffisante, est-ce que ma gratitude toujours englobante suscite un amour codé?

Quelques mises à jour rapides:

J'ai testé mon application en modifiant la procédure stockée pour injecter les résultats dans une nouvelle table séparée, puis exécutez mon Excel export contre cette table - et il fonctionne très bien. Mais, puisque beaucoup de gens vont utiliser l'application en même temps, ce n'est pas une solution viable. Donc, je suis de retour à croire qu'il y a un problème avec cette instance de l'ensemble de données nécessitant un paramètre pour s'exécuter correctement pour l'exportation.

Heureux de répondre à toutes les questions au meilleur de ma capacité.

+0

Tout est un peu vague pour moi. D'où vient ce paramètre? Assurez-vous également que vos hypothèses sont correctes avant de faire quelque chose en fonction des hypothèses. Ce que je veux dire, c'est: Essayez un peu de débogage, pour recueillir des preuves tangibles. – GvS

+0

Désolé pour les informations vagues, j'ai essayé d'être aussi détaillé que possible. Quoi qu'il en soit, le paramètre provient de l'application vb elle-même, puis transmis dans la procédure stockée HISTORICAL_COSTS que j'utilise pour générer le DataSet. Mais, le débogage continue, comme il l'a fait depuis un jour et demi :) – Jasoomian

Répondre

0

Votre conclusion est définitivement fausse - une fois que l'ensemble de données est rempli, le paramètre n'est plus un facteur. Je ne vois rien d'anormal dans votre code et, comme vous l'avez dit, cela a marché ailleurs. Je commencerais par définir un point d'arrêt et m'assurer que l'ensemble de données contient des lignes comme prévu.

Questions connexes