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 :

[SQL Server 2005] Procédure stockée dynamique ?


Sujet :

MS SQL Server

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 76
    Par défaut [SQL Server 2005] Procédure stockée dynamique ?
    Bonjour à tous,
    j'ai un petit soucis que je n'arrive actuellement pas à résoudre.

    Je dois faire un simple SELECT sur une table. Le problème, c'est que je ne connais pas à l'avance les colonnes de mon SELECT.

    Je programme en C# et dans mon fichier config il y a une clé qui me donne le nom des champs de mon SELECT, par exemple LastName.FirstName ou LastName.Email, ...

    J'utilise des procédures stockées, donc je ne sais pas comment je peux faire pour modifier celle-ci dynamiquement.

    On m'a dit d'utiliser EXEC, mais je ne sais trop comment.

    Pouvez-vous m'aider ?

    Merci

  2. #2
    Membre émérite
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Par défaut
    tu peux passer la liste de tes variables séparés par une virgule dans une varible @select :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    create procedure dynamique
     
    @select varchar(500)
     
    AS
     
    DECLARE @QUERY AS VARCHAR(5000)
    SET @QUERY = 'SELECT ' + @select ' FROM lastname'
    EXEC(@QUERY)
    GO

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 76
    Par défaut
    Merci ca marche parfaitement.

    Par contre j'essaye de faire ca pour un Update, mais je n'y arrive pas.

    Voici ma stored procédure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE PROC [dbo].[UpdatePicture]
    @ProcedurePicture image,
    @ProcedureQuery VARCHAR(100)
    AS
    DECLARE @sql nvarchar(100)
    SET @sql=@ProcedureQuery
    EXEC dbo.sp_executesql @sql
    Et ma fonction Update:

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    public void UpdatePicture(string path, string updateQuery)
            {
                MessageBox.Show(path);
                System.Diagnostics.Debug.WriteLine(path);
                MessageBox.Show(updateQuery);
                System.Diagnostics.Debug.WriteLine(updateQuery);
                //Nom de la procédure embarquée
                string storedProcedure = "UpdatePicture";
                try
                {
                    FileStream fileStreamPicture = new FileStream(@path, FileMode.Open, FileAccess.Read);
    		        BinaryReader binaryReaderPicture = new BinaryReader(fileStreamPicture);
    		        byte[] fileToSave = binaryReaderPicture.ReadBytes((int)fileStreamPicture.Length);
    		        //Déclaration de la connexion à la DB en allant chercher les paramètres dans le fichier de configuration
                    SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["PhotosManagement.Properties.Settings.PhotosManagementConnectionString"].ConnectionString);
    		        //Déclaration de la fonction à exécuter
    		        SqlCommand command = new SqlCommand(storedProcedure,connection);
    		        //Déclaration du type de fonction à exécuter
    		        command.CommandType = CommandType.StoredProcedure;
    		        //Déclaration des paramètres à envoyer
                    SqlParameter parameterPicture = command.Parameters.Add("@ProcedurePicture", SqlDbType.Binary, fileToSave.Length, "Picture");
                    //Valeur des paramètres à envoyer
                    parameterPicture.Value = fileToSave;
                    SqlParameter parameterQuery = command.Parameters.AddWithValue("@ProcedureQuery", updateQuery);
    		        //Ouverture de la connexion à la DB
    		        connection.Open();
    		        //Exécution de la procédure embarquée
    		        SqlDataReader reader = command.ExecuteReader();
    		        //Fermeture du reader
    		        reader.Close();
    		        //Fermeture de la connexion à la DB
    		        connection.Close();
    		        //Fermeture du file stream
    		        fileStreamPicture.Close();
    		        //Fermeture du binary reader
    		        binaryReaderPicture.Close();
                }
                catch(Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }
    Qui m'affiche les bons paramètres à passer:

    C:\Documents and Settings\mgh\Desktop\PhotosManagement\test\[a.b].gif
    UPDATE Users SET Picture = @ProcedurePicture WHERE LastName = a AND FirstName = b

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 76
    Par défaut
    L'erreur que je reçois c'est que je dois déclarer ma @ProcedurePicture alors que c'est fait...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 76
    Par défaut
    Up

  6. #6
    Membre émérite
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SET @sql=@ProcedureQuery
    ici ta requete vaut exactement :
    UPDATE Users SET Picture = @ProcedurePicture WHERE LastName = a AND FirstName = b

    il ne peut pas excuter ca, il ne sait pas ce qu'est @ProcedurePicture

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 76
    Par défaut
    Et le @ProcedurePicture image, il sert à quoi alors ?

    Comment puis-je faire ?

  8. #8
    Membre émérite
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Par défaut
    comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE PROC [dbo].[UpdatePicture]
    @ProcedurePicture varchar(200),
    @ProcedureQuery VARCHAR(100)
    AS
    DECLARE @sql nvarchar(100)
    SET @sql= 'UPDATE Users SET Picture = ' + @ProcedurePicture + ' WHERE LastName = a AND FirstName = b'
    EXEC dbo.sp_executesql @sql

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 76
    Par défaut
    Pourquoi Picture n'est plus de type image mais VARCHAR(200) ?

    Ca va jamais passer comme ca

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 76
    Par défaut
    Je sens qu'on va y arriver

    Ma query que j'envois via C#:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    updateQuery = "UPDATE Users SET Picture = ' + @ProcedurePicture + ' WHERE LastName = 'a' AND FirstName = 'b'";
    Et ma stored procedure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE PROC [dbo].[Test]
    @ProcedurePicture VARCHAR(8000),
    @ProcedureQuery VARCHAR(100)
    AS
    DECLARE @sql nvarchar(100)
    SET @sql= @ProcedureQuery
    EXEC dbo.sp_executesql @sql
    Mais ca ne marche toujours pas, il me dit qu'il y a un problème de '

  11. #11
    Membre émérite
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Par défaut
    et comme ca ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    updateQuery = "UPDATE Users SET Picture = ' + @ProcedurePicture + ' WHERE LastName = "a" AND FirstName = "b" ";

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 76
    Par défaut
    Snif, toujours pas

    Il me dit Unclosed Quotation Mark

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 76
    Par défaut
    Bon j'ai trouvé pourquoi il me mettait ca.

    La query etait dans un champ de 100 caractères et ca dépassait un peu.

    J'ai mis à 200, l'update se fait correctement maintenant mais quand je veux afficher la photo, ca me met une erreur apparement le fichier photo n'a pas été bien envoyé

  14. #14
    Membre émérite
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Par défaut
    bah là tu update ton champ en stockant le chemin d'acces à ton image, pas l'image en elle meme, moi je l'ai jamais fait, je sais pas exactement ce qu'il faut faire.

    Moi je t'ai indiqué comment executer une requete dynamique.

Discussions similaires

  1. [ODBC] [SQL Server 2005] Procédure stockée
    Par geo54 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 08/06/2010, 09h48
  2. Réponses: 1
    Dernier message: 13/05/2009, 12h57
  3. SQL SERVER 2005 procédure stockée
    Par elrick richese dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 18/03/2009, 11h54
  4. [SQL-SERVER 2005]Procédure stockée avec table temporaire
    Par mathieu44800 dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 03/08/2007, 14h18

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