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

Scripts/Batch Discussion :

Tester la présence d'une valeur dans les résultats d'une requête sql [PowerShell]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté

    Profil pro
    En reconversion
    Inscrit en
    Novembre 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Novembre 2007
    Messages : 180
    Par défaut Tester la présence d'une valeur dans les résultats d'une requête sql
    Bonjour,
    Je galère depuis plusieurs heures pour réaliser un simple test pour vérifier la présence d'une valeur. Je n'ai pas pour objectif d'apprendre Powershell, ce n'est qu'un besoin ponctuel, mais là, sur ce point, je patine.

    Je récupère d'abord sur une base de données SQL Server une liste de valeur (une seule colonne) que je mets dans une variable $trigramme_list
    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
    Function Sql_Query([string] $sqServer, [string] $sqBase, [string] $sqQuery)
     {
       $Connection = New-Object System.Data.SqlClient.SqlConnection
       $Connection.ConnectionString = "Server = $sqServer; Database = $sqBase; Integrated Security = True"
       $sqlCmd = New-Object System.Data.SqlClient.SqlCommand
       $sqlCmd.CommandTimeout = 30
       $sqlCmd.CommandText = $sqQuery
       $sqlCmd.Connection = $Connection
       $DataSet = New-Object System.Data.DataSet
       $Adapter = New-Object System.Data.SqlClient.SqlDataAdapter
       $Adapter.SelectCommand = $sqlCmd
       $Adapter.Fill($DataSet)
       $Connection.Close()
       return $DataSet.Tables[0]
     }
    $SQLSERVER = "----"                              
    $SQLBASE = "master"                         
    $sqlQuery = "select SUBSTRING(name,13,LEN(name)-12) as trigramme from sys.databases where name like '-----_%'"  
    
    $trigramme_list = Sql_Query $SQLSERVER $SQLBASE $sqlQuery
    Ensuite, je demande la saisie d'un trigramme dans un prompt.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function demande_trigramme()
    {
        $trigramme = Read-Host 'Quel est le trigramme à utiliser ?'
        If ($trigramme.length -ne 3)
            {demande_trigramme}
        $trigramme
    }
    [String]$trigramme = demande_trigramme
    Viens la galère. Je veux vérifier la présence du trigramme saisie dans la base de données, afin de savoir si je redemande à l'utilisateur de saisir un autre trigramme, inexistant en base.
    J'ai essayé avec une boucle for :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    For($numligne=1; $numligne -lt $trigramme_list.length  ; $numligne++)
        {$trigramme_list[$numligne] -eq $trigramme  }
    Mais la comparaison ne s'effectue pas, je suppose qu'il y a un problème de type de données ...
    J'ai aussi essayé avant avec une boucle foreach mais là aussi, cela ne fonctionnait pas, un problème d'index ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [int]$test_trigramme = 0
    foreach ($ligne in $trigramme_list)
     {
        If ($ligne -eq $trigramme) {$test_trigramme ++}
     } 
    If ($test_trigramme -ne 0) {demande_trigramme}
    Ce test est bien sûr à intégrer à la fonction demande_trigramme dans un else, mais pour développer je commence par faire des tests à l'extérieur de la fonction.

    Je suis persuadé que c'est du basique pour beaucoup d'entre vous, mais pas pour moi. Je suis à la limite d'envoyer Powershell sur les roses, et revenir vers du python.

    Merci pour votre aide

  2. #2
    Membre expérimenté

    Profil pro
    En reconversion
    Inscrit en
    Novembre 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Novembre 2007
    Messages : 180
    Par défaut une solution en passant par un autre chemin
    En me relisant, je me suis dit que je pourrai ruser. Cela ne m'en dit tout de même pas plus sur mes problèmes précédents.

    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
    43
    44
    45
    46
    Function Sql_Query([string] $sqServer, [string] $sqBase, [string] $sqQuery)
     {
       #Etablit la connexion avec la base SQL.
       $Connection = New-Object System.Data.SqlClient.SqlConnection
       $Connection.ConnectionString = "Server = $sqServer; Database = $sqBase; Integrated Security = True"
    
       #Crée une commande SQL.
       $sqlCmd = New-Object System.Data.SqlClient.SqlCommand
       $sqlCmd.CommandTimeout = 30
       $sqlCmd.CommandText = $sqQuery
       $sqlCmd.Connection = $Connection
    
       #Exécute et récupère le résultat.
       $DataSet = New-Object System.Data.DataSet
       $Adapter = New-Object System.Data.SqlClient.SqlDataAdapter
       $Adapter.SelectCommand = $sqlCmd
       $Adapter.Fill($DataSet)
    
       #Ferme la connexion avec la base SQL.
       $Connection.Close()
    
       #Renvoie le résultat.
       return $DataSet.Tables[0]
     }
    
    #Paramètres de connexion.
    $SQLSERVER = "-----"                             
    $SQLBASE = "master"                           
    
    Function demande_trigramme()
    {
        $trigramme = Read-Host 'Quel est le trigramme à utiliser ?'
        If ($trigramme.length -ne 3)
            {   $trigramme = ""
                demande_trigramme}
        Else
            {
            $sqlQuery = "select 1 as result from sys.databases where name like '-----_%' and SUBSTRING(name,13,LEN(name)-12) = '" + $trigramme + "'"
            $trigramme_list = Sql_Query $SQLSERVER $SQLBASE $sqlQuery
            If ($trigramme_list -ne 0) {
                                        $trigramme = ""
                                        demande_trigramme}
            }
        $trigramme
    }
    [String]$trigramme = demande_trigramme
    Pour celles et ceux qui se poseraient la question, je récupère le trigramme pour lancer par la suite la création d'une nouvelle base de données dont le nom est préfixé toujours de la même façon. Il me fallait d'abord vérifier la saisie de l'utilisateur pour ne pas risquer d'endommager la base de données.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 756
    Par défaut
    Salut,

    je sais pas si ça peut t'aider, mais j'ai eu un problème à peu près similaire l'autre jour.

    Je lançais une requête (en python, mais le fonctionnement est similaire j'imagine à ce niveau là). Et je devais pouvoir lire le retour le résultat de mon select pour adapter le traitement, du coup, j'ai fais en sorte que le retour de la requête soit exporté au format csv dans un fichier que par la suite tu devrais pouvoir consulter sans problème.

  4. #4
    Membre expérimenté

    Profil pro
    En reconversion
    Inscrit en
    Novembre 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Novembre 2007
    Messages : 180
    Par défaut
    Merci pour ton idée.

    Finalement, j'ai contourné le problème.
    En fait il faut apprendre le framework .Net pour utiliser Powershell plus en profondeur, et je n'en ai pas envie, je préfère les technologies ouvertes.

    Dans la suite du script j'ai du réutiliser le résultat d'une requête, et j'ai fini par voir un type d'objet DataRow. Là, j'ai trouvé une fonction ItemArray que l'on peut utiliser pour récupérer la valeur en faisant par exemple ainsi $monobjet[1].ItemArray

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/11/2015, 15h50
  2. Réponses: 1
    Dernier message: 22/03/2014, 17h19
  3. [XL-2000] Remplir une valeur dans cellule à partir d'une valeur precise d'un fichier texte
    Par cactus666 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 26/01/2010, 10h31
  4. [VB2008E] Où stocker une valeur dans les items d'une combobox ?
    Par dsolheid dans le forum Windows Forms
    Réponses: 2
    Dernier message: 19/01/2008, 19h14
  5. problem avec la recherche d'une valeur dans les table
    Par anilane dans le forum Bases de données
    Réponses: 6
    Dernier message: 25/05/2007, 19h35

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