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 :

probléme de requete SQl dans une base SQL Server


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 111
    Points : 49
    Points
    49
    Par défaut probléme de requete SQl dans une base SQL Server
    salut à tous,

    j'ai un problème, je me connecte en vb à une BD Sql server mais je n'arrive pas à faire une requête sql à partir de cette table.

    En access je met ca (le code ci dessous) mais en SQL server je ne sais pas comment le faire???

    Ca n'accepte pas que je mette Set MaDb = MaDbSQLServer

    merci pour vos aides


    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
     
    connection.......
    strConn="Provider=SQLOLEDB;DataSource=;uid=;pwd=;database=MaDbSQLServer"
    Conn.Open strConn
    Set MaDb = MaDbSQLServer
    Set Resultat = MaDb.OpenRecordset("SELECT * FROM matable where ")
    Resultat.MoveFirst
     
    While Not Resultat.EOF
    DateOuv = Resultat![OpenDate]
    ....
    Resultat.MoveNext
    Wend
    Conn.Close
    End Sub

  2. #2
    Membre actif
    Inscrit en
    Février 2009
    Messages
    224
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 224
    Points : 269
    Points
    269
    Par défaut
    Bonjour,
    Je ne pense pas que ce soit une erreur SQL Serveur mais cela semble putôt être une erreur lièe au langage Ce n'est pas le bon forum. Mais je vois mal comment vous pouvez esperer travailler sur une base sans faire appel à votre connexion? LA requete est sans doute à associer à la connexion avant de pouvoir l'exécuter.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 111
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par jero44 Voir le message
    Bonjour,
    Je ne pense pas que ce soit une erreur SQL Serveur mais cela semble putôt être une erreur lièe au langage Ce n'est pas le bon forum. Mais je vois mal comment vous pouvez esperer travailler sur une base sans faire appel à votre connexion? LA requete est sans doute à associer à la connexion avant de pouvoir l'exécuter.
    Bonjour,

    J'ai mis plutot ca et ca marche!! merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    question.ActiveConnection = mabdsqlserver
    question.CommandText = "SELECT * FROM Incident where "
    Set Resultat = question.Execute
    ...

  4. #4
    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 : 42
    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
    Quel dommage pour les performances et la maintenabilité :

    - Vous avez mis 'SELECT *' : que pensez-vous que l'optimiseur de requêtes fait quand il trouve * ? il va chercher dans les tables système les colonnes des tables spécifiées par votre requête, puis les retourne toutes.
    Donc vous surchargez un petit peu en lectures et en CPU, mais un petit peu + un petit peu, ça finit par faire beaucoup.

    - Vous n'avez pas précisé le schéma auquel appartient la table 'Incident'. Là encore, ue pensez-vous que l'optimiseur de requêtes fait ? si vous êtes sous SQL Server 2000, il va d'abord chercher la table dans le rôle sys, et dans tous les cas dans le rôle dbo, puis enfin dans les rôles crées par l'utilisateur s'il en existe.

    - Comme vous spécifiez la requête dans le code de votre application, vous la faites passer à travers le réseau, SQL Server la compile à chaque fois que vous y faites appel, ... alors qu'en utilisant une procédure stockée vous bénéficiez du cache de plans qui conserve les plans d'exécution compilés. Vous n'avez qu'à appeler votre procédure stockée en lui passant des paramètres : moins de trafic réseau, plus de sécurité, plus de performances ...

    - Que se passe-t-il lorsque vous devez modifier la requête ? vous la modifiez dans le code de votre application, puis vous la recompilez et la republiez.
    Si vous avez un certain nombre d'utilisateurs, ça devient vite ingérable.
    Avec une procédure stockée, vous mettez simplement à jour le code de celle-ci, la modification est instantanée, et vous n'avez pas besoin de recompiler votre application

    @++

  5. #5
    Membre confirmé Avatar de agemis31
    Profil pro
    DBA
    Inscrit en
    Octobre 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : DBA

    Informations forums :
    Inscription : Octobre 2007
    Messages : 399
    Points : 478
    Points
    478
    Par défaut
    Bonsoir,

    - Comme vous spécifiez la requête dans le code de votre application, vous la faites passer à travers le réseau, SQL Server la compile à chaque fois que vous y faites appel, ... alors qu'en utilisant une procédure stockée vous bénéficiez du cache de plans qui conserve les plans d'exécution compilés.
    C'est un mythe ça, depuis la V7, SQL Serveur compile et cache les requêtes adhoc paramétrées de la même façon que les procédures stockées.
    L'énorme avantage d'utiliser les procédures stockés, IMHo, est l'isolation applicatif/Serveur SQL.

    @+

  6. #6
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Citation Envoyé par agemis31 Voir le message
    Bonsoir,



    C'est un mythe ça, depuis la V7, SQL Serveur compile et cache les requêtes adhoc paramétrées de la même façon que les procédures stockées.
    L'énorme avantage d'utiliser les procédures stockés, IMHo, est l'isolation applicatif/Serveur SQL.

    @+

    Voilà un sujet controversé

    Effectivement, le plan d'exécution des requêtes adhoc sont également mis en cache. Cependant le fait d'envoyer une requête texte qui a été modifiée va certainement provoquer une recompilation du plan d'éxécution et la non utilisation du plan déjà en cache. (Même si le moteur sqlserver est capable de faire une paramétrisation pour des requêtes textes relativement simple).

    Il est vrai aussi qu'en utilisant les commandes : SqlCommand et SqlParameter avec l'exécution de la méthode prepare avec ado.net, SQLServer remplace la requête texte d'origine par l'appel de la procédure sp_executesql et permet donc de bénéficier du plan d'éxecution de la requête. Mais dans ce cas également la simple modification de la requête texte provoquera une recompilation du plan.

    De plus pour les raisons citées par Elsuket il y a de grandes chances pour qu'il y ait une recompilation du plan d'exécution à chaque fois (absence du schéma par exemple)

    Bien sûr l'inconvénient majeur avec les procédures stockées c'est d'utiliser un plan d'éxécution faussé. Il faudra donc utiliser sp_recompile ou l'option WITH RECOMPILE dans la procédure.


    Personnellemnt j'ai une nette tendance à préférer l'utilisation des procédures stockées pour ces principales raisons :

    - Maintenabilité de l'application
    - Sécurité
    - Optimisation des données envoyées sur le réseau (On n'envoie sur le réseau que l'appel d'exécution de la procédure et ses paramètres éventuels au lieu de toute la requête sql texte)

  7. #7
    Membre confirmé Avatar de agemis31
    Profil pro
    DBA
    Inscrit en
    Octobre 2007
    Messages
    399
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : DBA

    Informations forums :
    Inscription : Octobre 2007
    Messages : 399
    Points : 478
    Points
    478
    Par défaut
    Bonjour mikedavem,

    C'est effectivement un sujet contreversé.
    Mais ce n'est pas sur la contreverse que je voulais insister , mais sur cette légende qui dit que SQL Serveur ne cacherai pas les query ad hoc.

    Pour la contreverse, je préfère de loin les procédures stockées, parce que ca permet d'avoir les données et les traitements essentiels dans la base et de former un frontal cohérent à n'importe quelle application.

    Mais il y a des gens qui utilisent correctement du code ad hoc paramétré, parce qu'ils estiment y gagner beaucoup en temps de maintenance (je ne suis pas convaincu). C'est sans doute une question de culture du team de developpement...

    @+

  8. #8
    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 : 42
    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
    SQL Serveur compile et cache les requêtes adhoc paramétrées de la même façon que les procédures stockées.
    Certes, mais cela dépend purement de combien cela coûte de les compiler, et comme pour les procédures stockées, de leur fréquence d'utilisation.
    Et si l'on regarde dans les vues dynamiques de SQL Server 2005, on s'aperçoit vite que pour des requêtes ad-hoc même simples, cela coûte un peu plus cher ... et quid de leur optimisation quand elles sont dans une application ?

    @++

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/07/2010, 23h43
  2. erreur dans une requête sql dans une fonction php
    Par frboyer dans le forum Langage
    Réponses: 3
    Dernier message: 07/04/2009, 13h37
  3. [MySQL] Enregistrement d'une requête SQL dans une base de données MySQL
    Par glsn dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 15/07/2008, 13h06
  4. Problème de champ vide dans une base sql
    Par lionel256 dans le forum VB.NET
    Réponses: 13
    Dernier message: 16/04/2008, 17h07
  5. [SQL] Importer un fichier .sql dans une base de données avec PHP
    Par budiste dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 23/06/2006, 14h15

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