je ne pensais pas à ça mais à passer une table en paramètre donc plusieurs colonnes avec plusieurs lignes comme ça tu n'appel qu'une seul fois ta proc stock, il faut juste vérifier que postgre gère les variables de type table et tu en crée une en c# donc (pour sql server c'est le type SqlDbType.Structured)
Je ne suis pas sur de pouvoir...
Mais je crois qu'ici ca n'a aucun intérèt, puisque les données traitées ne viennent pas de notre base, mais d'un WebService appelé chez un prestataire.
Donc après l'appel à ce WebService, je récupère un XML que je deserialize afin de pouvoir exploiter les données. C'est ensuite pour cela qu'on fait un UPDATE/INSERT : on ne sait pas si la donnée traitée est déja dans notre BDD ou si elle a été rajoutée chez les prestataire...
il n'existe pas de type table mais il y a le tableau, j'ai très bien compris ton problème, justement je te proposais de passer en paramètre un tableau pour éviter de rappeler plusieurs fois la même proc stock
tu passe directement toutes tes informations à ta proc stock et ensuite tu fais des requêtes select dessus pour faire des update/insert
Ah d'accord au temps pour moi, c'est moi qui avait mal compris
Par contre, comment mettre en "relation" les données du tableau, et la proécdure stockée?
Faudrait il une deuxième procédure qui prenne en paramètre un tableau, et qui aappelle la première pour chaque ligne?
Ou exsite t'il une méthode plus simple?
tu modifies ta procédure stockée pour qu'elle prenne en paramètre un tableau et de la tu fais le nécessaire pour faire un update ou un insert, après pour le faire en 2 proc stock pourquoi pas mais pas sur que c'est le plus rapide au niveau exécution mais surement le plus simple pour toi (ça devrait déjà être plus rapide que la solution actuel)
Visiblement l'instruction "MERGE" n'existe pas sous PostgreSQL.
Cela dit, tu peux regarder de ce côté pour une implémentation "équivalente"
Aurais tu des exemples? J'ai trouvé un lien sur la documentation de npgsql, rubrique "Working with Arrays" : http://npgsql.projects.postgresql.or...serManual.html
Mais ce n'est pas très clair pour moi, car ils ne passent pas les paramètres à une procédure...
Il faudrait donc que je passe en paramètre 1 tableau par paramètre utililisé par ma procédure stockée, et qu'ensuite je les parcoure depuis une boucle de la procédure stockée?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 NpgsqlCommand command = new NpgsqlCommand("select :arrayParam", conn); command.Parameters.Add(new NpgsqlParameter("arrayParam", NpgsqlDbType.Array | NpgsqlDbType.Integer)); command.Parameters[0].Value = a; Console.WriteLine(command.ExecuteScalar());
En attendant, j'ai modifié la procédure stockée pour pouvoir loguer les éventuelles exceptions rencontrés dans la base de données, puisque la solution actuelle ne me permets pas de les faire remonter dans le code :
N'y a t'il aucun moyen de faire remonter les exceptions avec le DataAdapter?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 EXCEPTION WHEN OTHERS THEN curtime := 'now'; table_name := 'group_team'; error := cast(sqlstate as varchar); request := 'team_id =' || cast(teamid as varchar) || ', group_id =' || cast(groupid as varchar) || ', round_id =' || cast(roundid as varchar); INSERT INTO synchronisation_errors_logs("date", error, table_name, request) VALUES(curtime, error, table_name, request); RETURN 0;
La valeur récupérée pour recordsInserted correspond systématiquement au nombre de lignes de mon tableau, même si certaines des lignes n'ont pas été inséres ou mises à jour...
Code : Sélectionner tout - Visualiser dans une fenêtre à part int recordsInserted = adpt.Update(dtGroupTeam);
One minute was enough, Tyler said, a person had to work hard for it, but a minute of perfection was worth the effort. A moment was the most you could ever expect from perfection.
-- Chuck Palahniuk, Fight Club, Chapter 3 --
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager