3 votes

L'application s'interrompt lorsque DataTable.Load(), où se situe le problème ?

Je fais une application C# Windows Forms qui télécharge des fichiers à partir d'une API, décompresse ces fichiers et les analyse dans la base de données. Mon problème se situe au niveau de l'analyse syntaxique. Et d'autres fils de discussion sur " L'application en mode pause "ne précise pas pourquoi cela se produit avec .Load() .

Je fais une requête Openrowset pour lire le fichier dans la base de données. Tout est bien lu. Ensuite, je fais une requête dataTable.Load() de ce lecteur. Ensuite, l'application est arrêtée par une exception interne déclenchée dans cette bibliothèque. Elle s'interrompt simplement. Je ne reçois pas d'information sur l'exception. Voici la partie essentielle du code (la vraie requête est tellement longue, j'ai mis celle-ci comme exemple) :

private DataTable dataTable;
    public void loadDataTable()
    {
        dataTable = new DataTable();
        dataTableConsumo.Load(queryExecutor.ExecuteReader("SELECT * FROM Prices", connection));
    }

    public SqlDataReader ExecuteReader(String query, SqlConnection connection)
    {
        SqlCommand comando = new SqlCommand(query, connection);
        comando.CommandTimeout = 0;
        return comando.ExecuteReader();
    }

Le fichier CSV est énorme. Il contient 17 millions de lignes. J'ai essayé de charger le fichier en faisant un top 200000 et ça marche bien. quand je .Load() et ensuite .WriteToServer (en créant une nouvelle instance de la table de données et en forçant l'appel GC à chaque itération de la boucle partitionnée en fonction du nombre total de lignes), mais seulement 2 ou 3 fois. Au quatrième chargement, il s'arrête tout simplement. Et ce n'est pas une question de mémoire car je la contrôle tout le temps. J'ai essayé plusieurs choses. Quelques captures d'écran :

First iteration

Second iteration (check the arrow)

Et le message sans aide qui me donne des cauchemars et ne me permet pas de voir l'exception ou même de déboguer le code :

The message

Toute aide sera appréciée. Merci beaucoup pour votre temps.

0voto

JC Mellado Points 51

Ok, on dirait que c'est un bug de Visual Studio. Ca arrive dans les applications WinForms et ce n'est pas critique. L'application s'arrête simplement, mais vous pouvez la reprendre et elle fonctionne bien.

Si vous portez l'application WinForms vers une application console automatisée, cela ne se produit jamais. Problème partiellement résolu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X