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 :
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 :
Toute aide sera appréciée. Merci beaucoup pour votre temps.