Powershell SQL server requête de mise à jour
Je suis en train d'essayer de se connecter à une Base de données Microsoft SQL et mise à jour de tout dossier que le changement de champ = 'x'. Je suis en mesure d'interroger la base de données, mais lorsque je tente de faire une mise à jour, j'obtiens cette erreur
Remplir : l'Exception d'appeler "Remplir" avec "1" argument(s): "Délai d'attente expiré. Le délai écoulé avant la fin de l'opération ou le serveur ne répond pas."
#Create SQL Connection
$con = new-object "System.data.sqlclient.SQLconnection"
#Set Connection String
$con.ConnectionString =(“Data Source=server;Initial Catalog=IDCards;Integrated Security=SSPI”)
$con.open()
$sqlcmd = new-object "System.data.sqlclient.sqlcommand"
$sqlcmd.connection = $con
$sqlcmd.CommandTimeout = 600000
#$sqlcmd.CommandText = “select * from tblPhotoID where changed = 'X'”
$sqlcmd.CommandText = “UPDATE dbo.tblPhotoID SET Changed = '1' WHERE Changed ='X'”
$adapter = New-Object system.data.sqlclient.sqldataadapter ($sqlcmd.CommandText, $con)
$set = New-Object system.data.dataset
$adapter.Fill($set)
Il y a environ 4000 enregistrements qui serait mis à jour actuellement. Le script s'exécute en environ 30 secondes avant d'expirer. J'ai tenté d'augmenter le délai d'expiration de commandes et obtenu les mêmes résultats.
Ce qui se passe si vous essayez de mettre à jour un seul enregistrement?
OriginalL'auteur Dan Finch | 2013-10-14
Vous devez vous connecter pour publier un commentaire.
Votre instruction de mise à jour n'est pas d'aller-retour d'un jeu d'enregistrements, donc il n'y a rien à remplir le dataset. Au lieu de cela vous voulez essayer le suivant:
J'ai vérifié le code sur ma machine (PowerShell 3.0) et j'ai trouvé que j'avais besoin d'ajouter un jeu de parenthèses à la suite de l'appel de la méthode ExecuteNonQuery sinon j'ai eu une erreur.
OriginalL'auteur
Dans votre code, vous avez utilisé
$adapter.Fill($set)
pour info, Il est utilisé pour ajouter des lignes dans le jeu de données pour correspondre à celles de la source de données.Au lieu de cela, vous pouvez utiliser$adapter.Update($Set)
je pense que cela va résoudre votre problème. Vous pouvez également utiliser$sqlcmd.ExecuteNonQuery()
OriginalL'auteur Sid
OriginalL'auteur Dmitriy S.