J'ai cherché longtemps avant de comprendre ce qui coinçait car c'était une erreur d'exécution.
Voila le problème :
J'ai, dans SQL Server 2012, une vue qui fonctionne sans souci. Je décide de prendre juste la partie SELECT... et l'intégrer dans une appli Windows Form. J'ai déjà fait ce type d'appli avec un programme exemple du Coach Microsoft. Mais dans mon cas ça coince et l'erreur se ramasse sur le nom du champ.
D'abord voici ma requête SQL de ma vue SQL Server sans reproche
Collée dans une variable string (en supprimant les retours à la ligne que C# n'aime pas, même si ça fait un code moche comme tout) ça ne fonctionne pas et ExecuteReader se ramasse avec ce qu'il considère comme un dépassement de capacité sur le premier champ rencontré. Erreur pas évidente et j'ai séché longtemps. Mettre des crochets [Auteurs].[Nom] de résout rien. En fait c'est le nom de la table (Auteurs) qui précède qui ne va pas. Simplifiant ma requête à l'extrême aux fins de débogage ça ne fonctionnait pas mieux avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 SELECT Auteurs.Nom, Auteurs.Prénom, Ouvrages.Titre, Ouvrages.[Sous-titre], Catégories.[Nom de la catégorie], Editeurs.Nom AS Editeur, Collections.[Titre de collection] FROM Catégories INNER JOIN Auteurs INNER JOIN Editeurs INNER JOIN Collections ON Editeurs.éditeurID = Collections.éditeurID INNER JOIN Ouvrages ON Editeurs.éditeurID = Ouvrages.éditeurID AND Collections.collectionID = Ouvrages.collectionID ON Auteurs.auteurID = Ouvrages.auteurID ON Catégories.catégorieID = Ouvrages.catégorieID GROUP BY Auteurs.Nom, Auteurs.Prénom, Ouvrages.Titre, Ouvrages.[Sous-titre], Catégories.[Nom de la catégorie], Editeurs.Nom, Collections.[Titre de collection]
et parfaitement avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT Auteurs.Prénom, Auteurs.Nom FROM Auteurs
Pourquoi donc ne pas pouvoir préfixer le nom du champ avec le nom de la table comme c'est une bonne habitude prise en SQL ? D'autant plus conseillé que lors d'un SELECT à rallonge avec des JOIN en pagaille le moteur SQL risque de grimacer sur des ambigüités.
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT Prénom, Nom FROM Auteurs
Question subsidiaire : Peut-on utiliser directement une vue dans un code Windows Form de la même façon qu'on utilise une procédure stockée (en l'appelant par son nom) ?
Merci à tous de vous pencher sur mes petites misères.
Partager