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

MS SQL Server Discussion :

MSDE - ASP et la procédure stockée


Sujet :

MS SQL Server

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 24
    Par défaut MSDE - ASP et la procédure stockée
    Bonjour,
    Je viens de réaliser un site avec MSDE, version gratuite de SQLServer, ASP (et non pas ASP.Net !) et je souhaiterai stocker une requête un peu compliquée directement sur le serveur, dans une procédure stockée.

    Je me suis un peu inspiré de ce qui se fait dans le .Net pour l'écriture de la requête, ce qui donne :
    CREATE PROCEDURE [db_datareader].[lec_lstann]
    (@code_famille CHAR(3), @DonOuR CHAR(1)) AS
    DROP TABLE #TableTemp
    CREATE TABLE #TableTemp
    (
    ann_nom_objet VARCHAR(100),
    ann_comment_objet VARCHAR(255)
    )

    INSERT INTO #TableTemp
    SELECT * FROM Annonce
    INNER JOIN (Inscription
    INNER JOIN (Region
    INNER JOIN Dept
    ON dp_coder = reg_coder)
    ON ins_dept = dp_dept)
    ON ann_email = ins_email
    WHERE ann_code_famille = @code_famille
    AND ann_etat = 'V'
    AND ann_type_dour = @DonOuR
    ORDER BY ann_type_dour, ann_num_dour;
    GO
    Jusque là c'est OK, d'autant que la requête toute seule fonctionne (je veux parler du select !).
    Pour la chaîne de connexion, j'utilise ;
    Dim Conn
    Set Conn = Server.CreateObject("ADODB.Connection")
    Conn.Open "Provider=SQLOLEDB; Data Source=(local); Initial Catalog=maDB; User ID=sa; Password=admin","",""

    Le problème se pose pour l'appel de la procédure qui me rejette en "Impossible de trouver la procédure stockée 'lec_lstann'. ", alors qu'elle est bien reconnue par Web Matrix. Je fais l'appel par :
    RS.open "exec lec_lstann '001', 'D'", Conn, adOpenStatic

    Mon problème est donc sur l'appel de cette procédure ... je suppose pour la récupération des données c'est transparent (je veux dire que la procédure soit stockée ou non !) mais j'en suis pas là pour l'instant.
    Merci de bien vouloir m'aider
    Ben

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 995
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 995
    Billets dans le blog
    6
    Par défaut
    ta procédure va être une catastrophe :
    1) on en peut faire un DROP suivit d'un create dur le même objet
    2) les tables temporaires sont détruire en fin de session donc un DROP sur une table inexistante va générer une erreur et la SP partira en couille.

    Explique ce que tu veut faire ?

    A
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 24
    Par défaut
    Salut,
    Je voudrais coller le select un peu compliqué - tout est relatif, je sais : j'en ai fait des plus chiadés, mais sur mainframe (!) - dans une procédure stockée, histoire d'optimiser le traitement mais aussi d'acquérir un plus, une expèrience dont je pourrais me reservir ...
    Le drop de la table temporaire, faut le virer ? pas de problème ...
    Comment appeler une procédure stockée et comment utiliser le résultat dans mon contexte d'utilisation ? j'ai du mal à trouver de la doc' sur le sujet.
    Merci d'avance

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 24
    Par défaut
    Bonjour,
    Ca y est : j'ai trouvé, je me permets donc de compléter l'info - histoire d'enrichir le forum .... au cas où quelqu'un tombe sur l'annonce.
    La procédure stockée en elle même, elle s'appelle list_ann et reçoit 2 paramètres, le code_famille et le code DonOuR :
    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
     
    CREATE PROCEDURE list_ann
        @code_famille CHAR(2), @DonOuR CHAR(1) AS
    SELECT * FROM Annonce
    		 		INNER JOIN (Inscription
    					INNER JOIN (Region
    						INNER JOIN Dept
    						ON dp_coder = reg_coder)
    			  		ON ins_dept = dp_dept)
    				ON ann_email = ins_email
    		WHERE ann_code_famille = @code_famille
    					AND ann_etat = 'V'
    					AND ann_type_dour = @DonOuR
    		ORDER BY ann_type_dour, ann_num_dour;
    GO
    L'appel de la procédure en ASP se fait par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    	set cmd = Server.CreateObject("ADODB.Command")
    	set cmd.ActiveConnection = Connexion()
    	cmd.CommandText = "list_ann"
    	cmd.CommandType = adCmdStoredProc
     
    	cmd.Parameters.Append cmd.CreateParameter("code_famille", adChar, adParamInput, 2)	
    	cmd.Parameters.Append cmd.CreateParameter("DonOuR", adChar, adParamInput, 1)
    	cmd.Parameters("code_famille") = "01"
    	cmd.Parameters("DonOuR") = "D"
     
    	Set RS = Server.CreateObject("ADODB.Recordset")
    	Set RS = cmd.Execute
    Il ne reste plus alors qu'à exploiter le recordset, 'comme à la maison' !

    C'est vrai que le lien sur le cours SQL m'a bien aidé : http://sqlpro.developpez.com/Transac...ctSQL.html#2.2
    Mais aussi : http://support.microsoft.com/default.aspx?scid=kb;fr;468529

    @ +

  5. #5
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    D'accord, mais tu peut faire plus cours comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    'Tu crées un object connection
    set cn=CreateObject("ADODB.Connection")
    'Tu l'instancie avec une connection sachant que 
    'Connection() est une fonction qui te revoie un object ADODB.Connection
    set cn=connection()
    'Un object recordSet
    Set rs=CreateObject("ADODB.RecordSet")
    SQL="list_ann '01','D'"
    set rs=cn.execute(SQL)
    'Et là vous avez un recordset Classic
    NB: Toute commande sql est un envoyé vers SQL sous forme de texte pure.
    Tu stockes ta requête sous forme de texte pure et tu l'envoies vers SQL à lui de se debrouiller. Les Param1 ... c'est bien mais c'est lourd et pratique pour la gestion des Images par exemples !

    Bonne continuation !
    Merci.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  6. #6
    Membre chevronné
    Inscrit en
    Août 2002
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 354
    Par défaut
    Slt,

    La methode indiquee par bendev est pourtant la meilleure.

    - tu peux recuperer les parametres OUTPUT
    - tu peux recuperer la valeur de retour de la procedure
    - ADO prends en charge automatiquement les parametres regionaus quand tu passes pas un objet Parameter
    - executer une procedure stockee en tant que text via ADO ne permet pas toujours de profiter de toutes les fonctionnalites et dans certains cas penalise SQL Server (mise en cache des procedures, preparation de la commande par ado ..)

    ...

    et pour se faciliter la vie Microsoft a en telechargement sur leur site un addin pour VB qui genere tout cela !!

    a+

  7. #7
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    J'aimerais bien, sauf qu'il nous faut peut être passer par des testes comparer les temps de reponses et je crois qu'il faut également ce qu'on gagne en utilisans telle ou telle autre methode.

    Et je crois qu'il n'y jamais eu de meilleurs methode sauf celle qui te donne les resultats dans les délais raisonnables.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  8. #8
    Membre chevronné
    Inscrit en
    Août 2002
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 354
    Par défaut
    Slt,

    Concernat ce qu'on y gagne j'y ai deja repondu en partie, apres la doc ADO te fournis les autres.

    Concernant les tests, je l'ai ai fait a ma boite et on y gagne un peu en temps (c clair c'est pas enorme) mais je preferes avoir a ma disposition toutes les fonctionnalites de ADO en l'utilisant "correctement" que d'en perdre.

    a+

  9. #9
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    D'accord, nous n'allons pas faire un débat sur cela.
    Si tu veux, on ouvre un sujet sur ca !
    Je suis entièrement disponnible pour ça.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 24
    Par défaut
    Je mesure un peu plus l'étendue de mon ignorance, à vous écouter ... !
    Merci à tous !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. appel d'une procédure stocké en asp.net
    Par malcom x dans le forum Accès aux données
    Réponses: 17
    Dernier message: 24/04/2008, 17h23
  2. Réponses: 6
    Dernier message: 19/07/2007, 16h48
  3. Procédure stocké et asp
    Par boobs60 dans le forum ASP
    Réponses: 2
    Dernier message: 28/05/2007, 11h54
  4. Réponses: 3
    Dernier message: 20/04/2006, 17h59
  5. Appel de Procédure stockée en ASP
    Par James85 dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 14/11/2004, 17h55

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