IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Replace et apostrophe


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2007
    Messages : 16
    Points : 11
    Points
    11
    Par défaut Replace et apostrophe
    Bonjour !

    J'ai de la difficulté à effectuer cette requête. Cette requête est contenue dans une variable String dans le langage C#. valeurRecherche contient du string, voici des exemples : "manette", "l'autobus".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    "SELECT E.Entreprise_Id , E.Entreprise_Nom, E.Entreprise_Desc, P.Photo_Fichier FROM Entreprise AS E, Photo AS P WHERE E.Entreprise_Nom LIKE '%Replace(" + valeurRecherche + ", \"\'\", \"\'\'\")%' AND (E.Entreprise_Id = P.Photo_Entreprise_Id) 
    ORDER BY E.Entreprise_Nom"
    C'est le contenu de LIKE qui a des erreurs. J'effectue un Replace pour m'assurer que ce qui est cherché, ne contient pas d'apostrophe pour éviter une erreur. Ce que je veux qu'il y ait dans le LIKE '%Replace(valeurRecherche,"'","''")%'.

    Merci !

  2. #2
    Membre du Club Avatar de TheNet
    Inscrit en
    Juillet 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juillet 2006
    Messages : 83
    Points : 43
    Points
    43
    Par défaut
    Pourquoi tu ne fait pas comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    string q = "SELECT E.Entreprise_Id , E.Entreprise_Nom, E.Entreprise_Desc, P.Photo_Fichier FROM Entreprise AS E, Photo AS P WHERE E.Entreprise_Nom LIKE '%" + valeurRecherche.ToString().Replace("'", "''") + "%' AND (E.Entreprise_Id = P.Photo_Entreprise_Id) 
    ORDER BY E.Entreprise_Nom"

  3. #3
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Sous SQL Server, les chaînes se mettent entre simple quotes, et on ne peut pas combiner l'utilisation d'une fonction de chaîne avec le prédicat LIKE.

    Votre requête s'écrit donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LIKE '%' + REPLACE(valeurRecherche,'''', '') + '%'
    Vous auriez tout intérêt à placer votre code dans une procédure stockée (pour les raisons que j'évoque ici), cela vous éviterait d'avoir à écrire du code compliqué dans votre application

    Cela deviendrait, dans la base de données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE PROCEDURE Ps_RecherchePhotoEntreprise_ParNomEntreprise
    	@_nomEntreprise VARCHAR(32)
    AS
    BEGIN
    	SELECT E.Entreprise_Id,
    			E.Entreprise_Nom,
    			E.Entreprise_Desc,
    			P.Photo_Fichier
    	FROM dbo.Entreprise AS E,
    	INNER JOIN dbo.Photo AS P
    		ON E.Entreprise_Id = P.Photo_Entreprise_Id	
    	WHERE E.Entreprise_Nom LIKE '%' + REPLACE(@_nomEntreprise,'''', '') + '%'
    END
    Spécifiez vos jointures à l'aide de INNER | LEFT | RIGHT | CROSS JOIN : cela rendra votre code plus lisible puisque vous séparez les prédicats de jointures des filtres de votre requête, et dans certains cas particuliers, ce sera plus performant

    Il vous suffit ensuite d'appeler la procédure stockée dans votre code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    using (SqlConnection sqlcnx = new SqlConnection(...))
    {
        sqlcnx.Open();
     
        // Création de l'appel de procédure stockée
        SqlCommand requete = new SqlCommand("Ps_RecherchePhotoEntreprise_ParNomEntreprise", sqlcnx);
        requete.CommandType = CommandType.StoredProcedure;
        requete.Parameters.Add("@_nomEntreprise", SqlDbType.VarChar, 32).Value = monEntreprise.nom
    	requete.ExecuteNonQuery()
     
    	...
    @++

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2007
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Wow. Je suis impressionné par la réponse elsuket.

    J'en ai beaucoup à apprendre dans le SQL . Merci encore pour votre aide.

  5. #5
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Le site et le livre de SQLPro peuvent vous y aider, sans oublier ce forum

    @++

Discussions similaires

  1. Soucis avec fonction Replace et apostrophe
    Par richard_sraing dans le forum ASP
    Réponses: 2
    Dernier message: 30/04/2010, 08h03
  2. String.Replace protéger apostrophe
    Par PoZZyX dans le forum C#
    Réponses: 2
    Dernier message: 18/05/2009, 13h50
  3. [2.0] Fonction Replace avec apostrophe
    Par quanou dans le forum ASP.NET
    Réponses: 7
    Dernier message: 21/08/2008, 11h27
  4. problème SQL apostrophe et replace()
    Par Muffyn dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 04/09/2006, 14h30
  5. Pb apostrophes et replace access2000
    Par xycoco dans le forum Access
    Réponses: 8
    Dernier message: 06/10/2004, 15h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo