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:
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:
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:
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:
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
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:
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.