2009-12-03 7 views
0

Je ne suis pas sûr si mon code SQL et la pratique ici est bon, donc j'espère que quelqu'un pourrait m'éclairer. Pour essayer de séparer mon DAL de la couche Business, je n'utilise pas SQLDataSource sur la page. Au lieu de cela, j'ai créé un gridview pour afficher les résultats et j'ai appelé une commande SQL pour récupérer les résultats. J'ai la commande SQL suivante:Déclaration SQL fusionner/simplifier

string CommandText = "SELECT User.FName + User.Surname, Product.Name, Product.Quantity, Product.Price FROM User, Products WHERE Product.UserID = User.UserID"; 

Les résultats sont ensuite chargés dans un datareader et lié au contrôle GridView. Cela fonctionne bien. Cependant, l'instruction SQL est-elle inefficace? J'ai remarqué que certaines instructions SQL ont des crochets autour de chaque champ, mais lorsque j'essaie de le placer dans mes champs, aucun résultat n'est affiché. J'essaie également de fusionner le prénom et le nom de famille dans une colonne, avec un espace entre eux, mais ce qui précède ne met pas un espace entre eux, et je ne peux pas ajouter un espace dans l'instruction SQL. Enfin, tout ceci se produit dans le code-behind de la page shopping-cart. Cependant, n'est-il pas sûr d'avoir la chaîne de connexion et l'instruction SQL ci-dessus dans le codebehind? Ma chaîne de connexion est cryptée dans le fichier web.config et appelée via l'API de configuration.

Merci pour toute aide.

+0

D'où provient ProductDetail.Price? – WesleyJohnson

+0

Désolé, cela venait d'un fichier plus ancien. J'ai corrigé le code. – keyboardP

Répondre

3

Tout d'abord, en utilisant des crochets est facultatif dans la plupart des cas (IIRC, il y a très peu de cas où ils sont réellement nécessaires, telles que l'utilisation mots-clés dans la déclaration). Les crochets vont autour de chaque identifiant, par exemple,

SELECT [Server_Name].[Database_Name].[Table_Name].[Field_Name], ... 

En second lieu, pour ajouter un espace, vous pouvez utiliser SELECT User.FName + ' ' + User.Surname. Vous pouvez également créer un alias il - SELECT User.FName + ' ' + User.Surname AS [name]

Troisièmement, gardez la chaîne de connexion dans le web.config et chiffrez l'aide d'une clé. Enfin, vous pouvez envisager d'introduire dans le projet une couche d'accès aux données capable de renvoyer des objets à partir de votre source de données (cela peut valoir la peine d'examiner NHibernate, LINQ to SQL ou Entity Framework pour cela). Vous pouvez ensuite lier une collection d'objets à votre GridView.

1

Essayez ceci:

string CommandText = "SELECT 
    User.FName + ' ' + User.Surname AS Fullname, 
    Product.Name, 
    Product.Quantity, 
    ProductDetail.Price 
    FROM 
    User, Products 
    WHERE 
    Product.UserID = User.UserID"; 

Meilleurs voeux, Fabian

2

Longtemps sans utilisation SQL, mais je ne vois pas de problème avec votre requête, tant que la base de données est bien conçue. Pour concaténer deux colonnes de chaîne, utilisez quelque chose comme ceci:

User.FName + ' ' + User.Surname AS UserName 

Ajoutez simplement un espace entre deux chaînes. En ce qui concerne les problèmes de sécurité: tout le monde peut voir est une page Web de rendu. Si vous n'exposez pas de chaîne de connexion ni de requêtes dans le code HTML/JS rendu (comme dans les commentaires, etc.), ne vous inquiétez pas. La chaîne de connexion stockée dans web.config et la structure de base de données visible dans les requêtes dans le code serveur sont sécurisées tant que le serveur est sécurisé.