Meilleur auteur de réponses
Appeler requêtes sql dans C#

Question
-
Bonjour,
Je suis entrain de développer une application, qui permet , grosso modo, de manipuler des données d'une BD sur sql server, à savoir, tester des variables de la base, et selon des conditions, faire les instructions adéquates. La question est: comment je pourrai exécuter plusieurs requêtes sql, et les appeler dans mon programme en C#, sachant que les conditions( if, case, for), je veux les utiliser directement dans mes requêtes sql ?
Réponses
-
OK,
Alors dans un premier temps c'est de savoir quelles tables vont être la source, ensuite quelles seront les destinations ? Est-ce que ça risque de changer ? Est-ce que les colonnes vont aussi changer ou est-ce que ce sera toujours les mêmes ? Quel serait la condition pour insérer ?
Vous pouvez faire quelque chose du genre :
INSERT INTO la_table1 (champ1,champ2) SELECT champ1,Champ2 FROM la_table2 WHERE champ_valider=1;
On suppose dans ce cas que champ_valider est la condition à vérifier. Cette requête vous évites de faire un parcoure des données et de refaire un INSERT. Le mieux serait de faire une procédure ou fonction socké coté SQL qui fait le traitement avec vos condition imbriquées. Sinon en .Net par code faire quelque chose du genre :
string req=string.Format("INSERT INTO {0} (champ1,champ2) SELECT champ1,Champ2 FROM {1} WHERE champ_valider=1;", "la_table1", "la_table2")
les valeurs "la_table1/2" seront remplacées par vos variables dynamiques du cas. Vous pouvez faire de même avec champ1, champ2... afin de recréer dynamiquement la chaîne sans faire de redondance contenant plusieurs requêtes imbriquées. Et utiliser ExecuteNonQuery()
Ceci est un exemple général
Est-ce que vous avez compris ? Et est-ce que c'est ce que vous souhaitez faire ?
Cordialement
Merci de valider par "Proposer comme réponse" si celle-ci répond à votre demande !
- Modifié Lyamine mercredi 17 octobre 2012 17:20
- Marqué comme réponse jackbauer47 jeudi 18 octobre 2012 14:04
Toutes les réponses
-
Bonjour,
Dans SQL Server vous avez l'opérateur CASE (http://msdn.microsoft.com/fr-fr/library/ms181765.aspx) qui permet de faire un "if" en SQL.
La notion de "for" n'existe pas en SQL.Cordialement
Gilles TOURREAU - MVP C#
Architecte logiciel/Consultant/Formateur Freelance
Blog : http://gilles.tourreau.fr
- MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
- MCITP : SQL Server 2008 Developper
- MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 -
-
Bonjour,
Vous pouvez sérialiser vos tables
ou bien lire vos tables en début de programme et faire des requêtes en mémoire
Pouvez-vous nous donner un exemple précis ?
Quelle est la taille de votre BDD ou des tables à requêter ?
fred on youTube
fred -
Je travaille sur un système de calcul MRP, donc la BDD regroupe une centaine de tables, mais moi, je travaille sur seulement 4 ou 5 tables. Je dois, selon la variable que j'ai en entrée, saisie par l'utilisateur, faire des opérations(exemple: je sélectionne les lignes , qui correspondent à la variable entrée, dans une table, et je dois boucler selon le nombre de lignes de la table, remplir des champs dans les autres tables de la BDD, etc.).
Donc, je sais pas si je dois boucler sur C# et appeler les requêtes directement, ou je code mes conditions dans SQL server, et j'appelle le tout dans C# ?
-
Moi je bouclerai en C# et j’appellerai les requêtes directement mais peut être que par SQL ce serait plus performant notamment avec des procédures stockées.
fred on youTube
fred -
Merci pour votre aide.
Juste une dernière chose. J'ai déterminé le nombre de lignes dans une table (select count (*) from dbo.xxx), et je voudrai boucler sur ce nombre, càd, pour chaque ligne de la table, faire des opérations. j'ai pas trouvé une opération sur sql qui me permet d'extraire ligne par ligne et ainsi pouvoir faire ma boucle dans C# ?
-
Merci pour votre aide.
Juste une dernière chose. J'ai déterminé le nombre de lignes dans une table (select count (*) from dbo.xxx), et je voudrai boucler sur ce nombre, càd, pour chaque ligne de la table, faire des opérations. j'ai pas trouvé une opération sur sql qui me permet d'extraire ligne par ligne et ainsi pouvoir faire ma boucle dans C# ?
Bonjour,
il faut utiliser SqlCommand en indiquant une requête select puis utiliser SQLDataReader avec une boucle. Cette méthode va lire ligne par ligne la table.
Merci de valider par "Proposer comme réponse" si celle-ci répond à votre demande !
-
Bonjour
En place d’un boucle FOR en MS SQL vous pouvez adapter WHILE
http://msdn.microsoft.com/en-us/library/ms178642.aspx
Une autre solution est d’utiliser les curseurs.
http://msdn.microsoft.com/en-us/library/ms180169.aspx
Cordialement,
- Modifié Aurel Bera mercredi 17 octobre 2012 09:07
-
Merci pour votre aide.
Juste une dernière chose. J'ai déterminé le nombre de lignes dans une table (select count (*) from dbo.xxx), et je voudrai boucler sur ce nombre, càd, pour chaque ligne de la table, faire des opérations. j'ai pas trouvé une opération sur sql qui me permet d'extraire ligne par ligne et ainsi pouvoir faire ma boucle dans C# ?
Bonjour,
il faut utiliser SqlCommand en indiquant une requête select puis utiliser SQLDataReader avec une boucle. Cette méthode va lire ligne par ligne la table.
Merci de valider par "Proposer comme réponse" si celle-ci répond à votre demande !
-
Merci pour votre aide.
Juste une dernière chose. J'ai déterminé le nombre de lignes dans une table (select count (*) from dbo.xxx), et je voudrai boucler sur ce nombre, càd, pour chaque ligne de la table, faire des opérations. j'ai pas trouvé une opération sur sql qui me permet d'extraire ligne par ligne et ainsi pouvoir faire ma boucle dans C# ?
Bonjour,
il faut utiliser SqlCommand en indiquant une requête select puis utiliser SQLDataReader avec une boucle. Cette méthode va lire ligne par ligne la table.
Merci de valider par "Proposer comme réponse" si celle-ci répond à votre demande !
Donc, dans ce cas là, si je vais lire différentes lignes sur plusieurs tables (différentes conditions IF dans mon programme), je dois affecter plusieurs variables à SQLDataReader ?Vous avez différente table à lire ?
Merci de valider par "Proposer comme réponse" si celle-ci répond à votre demande !
-
-
OK,
Alors dans un premier temps c'est de savoir quelles tables vont être la source, ensuite quelles seront les destinations ? Est-ce que ça risque de changer ? Est-ce que les colonnes vont aussi changer ou est-ce que ce sera toujours les mêmes ? Quel serait la condition pour insérer ?
Vous pouvez faire quelque chose du genre :
INSERT INTO la_table1 (champ1,champ2) SELECT champ1,Champ2 FROM la_table2 WHERE champ_valider=1;
On suppose dans ce cas que champ_valider est la condition à vérifier. Cette requête vous évites de faire un parcoure des données et de refaire un INSERT. Le mieux serait de faire une procédure ou fonction socké coté SQL qui fait le traitement avec vos condition imbriquées. Sinon en .Net par code faire quelque chose du genre :
string req=string.Format("INSERT INTO {0} (champ1,champ2) SELECT champ1,Champ2 FROM {1} WHERE champ_valider=1;", "la_table1", "la_table2")
les valeurs "la_table1/2" seront remplacées par vos variables dynamiques du cas. Vous pouvez faire de même avec champ1, champ2... afin de recréer dynamiquement la chaîne sans faire de redondance contenant plusieurs requêtes imbriquées. Et utiliser ExecuteNonQuery()
Ceci est un exemple général
Est-ce que vous avez compris ? Et est-ce que c'est ce que vous souhaitez faire ?
Cordialement
Merci de valider par "Proposer comme réponse" si celle-ci répond à votre demande !
- Modifié Lyamine mercredi 17 octobre 2012 17:20
- Marqué comme réponse jackbauer47 jeudi 18 octobre 2012 14:04
-
Bonjour,
Est-ce que vous avez testé les solutions proposées ? Merci de partager avec nous les résultats, afin que d'autres personnes avec le même problème puissent profiter de cette solution.
Cordialement,
Aurel
-
Bonjour,
Merci pour tenir la communauté informée sur la suite de vos démarches.
Bonne journée,
Aurel