Je convertis une application VB6 en C# avec un backend SQL Server. L'application inclut un éditeur de requête très général qui permet à l'utilisateur d'écrire n'importe quelle requête sélectionnée et de renvoyer les résultats visuellement dans un contrôle de grille. Certaines tables ont plusieurs centaines de colonnes (mauvaise conception, je sais mais je n'ai aucun contrôle sur cela). Un cas d'utilisation typique pour un utilisateur d'administration serait deSélection de la même colonne à partir de la même table plusieurs fois dans la même instruction
select * from A_Table_With_Many_Columns
Cependant, alors qu'ils veulent être en mesure d'afficher toutes les données, ils sont particulièrement intéressés à 2 colonnes et ils veulent que ces être affiché comme la première 2 colonnes dans la grille (au lieu de 67e et 99e par exemple) de sorte qu'au lieu qu'ils exécutent la déclaration suivante:
select First_Interesting_Field, Second_Interesting_Field, *
from A_Table_With_Many_Columns
Ensuite, ils iront et modifier les données dans la grille. Cependant, lors de l'enregistrement de ces données, il en résulte une violation de la concurrence (DBConcurrencyException
). Cela a bien fonctionné avec les RecordSets connectés de VB6 mais pas si bien en C#. J'ai essayé une myriade de solutions en vain.
Est-ce que quelqu'un sait comment gérer cette exception de manière générique? (Rappelez-vous, l'utilisateur peut taper N'IMPORTE QUELLE déclaration ou joindre etc. dans l'éditeur de requête)
Est-ce que quelqu'un sait comment je peux manipuler les colonnes retournées de telle sorte que je supprime les 2 colonnes qui apparaissent plus loin dans la liste? (Ma difficulté ici est que si le nom de colonne dans la base de données est
EMail
donc je faisselect Email, * from Blah
les 2 colonnes pertinentes retournées sontEMail
et ADO.NET ou C# alias la deuxièmeEMail
colonne de la partie*
de la requête commeEMail1
donc je ne suis pas capable de détecter la deuxième colonne en double et retirez-le)quelqu'un at-il une solution de rechange que je ne l'ai pas pensé?
Merci beaucoup
La requête renvoie-t-elle un objet DataTable? –
Oui, il finit dans un DataTable lié à un Infragistics UltraGrid. – user2333990