2017-09-11 1 views
1

J'ai donc ce codeComment Numerate (1,2,3 ...) mon résultat DataReader

   Using FileObject As New FileStream(FileName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None) 
        Using StreamWriterObj As New StreamWriter(FileObject) 
         connect.Open() 
         Using reader As SqlDataReader = command.ExecuteReader() 
          Dim FieldCount As Integer = reader.FieldCount - 1 
          Do While reader.Read() 
           StreamWriterObj.Write(reader.Item(0)) 
           For i = 1 To FieldCount 
            StreamWriterObj.Write(" @ ") 
            StreamWriterObj.Write(reader.Item(i)) 
           Next 
           StreamWriterObj.WriteLine() 
          Loop 
         End Using 
         connect.Close() 
        End Using 
       End Using 

qui définit essentiellement mes résultats d'une requête SQL dans un objet StreamWriter et exporte comme. fichier txt. Voici un exemple du résultat après la requête de sélection:

+---------------------------------------+ 
|    Results    | 
+---------------------------------------+ 
+          + 
| Document No.| # | col 3 | col 4 | 
+-------------+-------+--------+--------+ 
| 333456  | 0 | "value"| "value"| 
+-------------+-------+--------+--------+ 
| 333456  | 0 | "value"| "value"| 
+-------------+-------+--------+--------+ 
| 462345  | 0 | "value"| "value"| 
+-------------+-------+--------+--------+ 
| 585357  | 0 | "value"| "value"| 
+-------------+-------+--------+--------+ 

Donc, ma tâche est de faire de telle sorte que, lorsque j'exporter le fichier txt, à l'intérieur ressemblera à ceci:

+---------------------------------------+ 
|    Results    | 
+---------------------------------------+ 
+          + 
| Document No.| # | col 3 | col 4 | 
+-------------+-------+--------+--------+ 
| 333456  | 1 | "value"| "value"| 
+-------------+-------+--------+--------+ 
| 333456  | 2 | "value"| "value"| 
+-------------+-------+--------+--------+ 
| 333456  | 3 | "value"| "value"| 
+-------------+-------+--------+--------+ 
| 462345  | 1 | "value"| "value"| 
+-------------+-------+--------+--------+ 
| 585357  | 1 | "value"| "value"| 
+-------------+-------+--------+--------+ 
| 585357  | 2 | "value"| "value"| 
+-------------+-------+--------+--------+ 

ou en d'autres termes de numéroter (numéro suivant) les lignes en fonction du numéro de document. (La requête de sélection est triée par Doc No).

Je pense qu'une solution judicieuse serait d'utiliser un StringBuilder, mais je vais avoir besoin d'aide avec cela.

Merci

+0

A l'intérieur du 'Pour i = 1 Pour FieldCount' obtenir le Doc Num dans une variable, et chaque fois qu'il change, incrémenter votre variable de séquence. Je remplirais probablement un datatable et l'utiliserais comme une source qui donnerait d'autres options. S'il vous plaît lire [demander] et prendre le [tour]. – Plutonix

+0

Étape 1 - si vous ne l'avez pas déjà fait, assurez-vous que votre requête ordonne les résultats par le numéro de document. Étape 2 - in vb, créez une variable nommée quelque chose comme numberForThisDocument. Puis, lorsque vous parcourez les résultats de la requête, attribuez des valeurs appropriées à cette variable et incluez-la dans votre sortie. –

+0

Je vous suggère de le faire directement avec la requête. C'est quelque chose qui peut être fait sur la plupart des bases de données. –

Répondre

0

id faire dans le sql réelle avec: -

WITH 
    q AS 
(select query) 
, 
sequenced as (
    SELECT 
    ROW_NUMBER() OVER (PARTITION BY [Document no. Column] ORDER BY [column name] 
) AS sequence_id, 
    * 
FROM 
    q 
) 
SELECT 
* 
FROM 
    sequenced 
+0

Merci! Avec un peu d'édition, cela devrait faire l'affaire. :) –

+0

Heureux d'avoir aidé :) –