2013-10-14 11 views
4

J'essaie de me connecter à une base de données Microsoft SQL et de mettre à jour tout enregistrement dont le champ modifié est = 'x'. Je peux interroger la base de données mais lorsque j'essaie de faire une mise à jour, j'obtiens cette erreurRequête de mise à jour du serveur Powershell SQL

Remplir: Exception appelant "Remplir" avec "1" argument (s): "Expiration du délai. achèvement 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 seraient mis à jour actuellement. Le script s'exécute environ 30 secondes avant l'expiration du délai. J'ai essayé d'augmenter le délai de commande et obtenu les mêmes résultats. Votre instruction de mise à jour ne renverra pas un jeu d'enregistrements, donc il n'y a rien pour remplir l'ensemble de données.

+0

Que se passe si vous essayez de mettre à jour un seul enregistrement? –

Répondre

17

Vous voulez plutôt les opérations suivantes:

#Create SQL Connection 
$con = new-object "System.data.sqlclient.SQLconnection" 

#Set Connection String 
$con.ConnectionString =(“Data Source=sb-inft-orange.ads.iu.edu;Initial Catalog=IDCards;Integrated Security=SSPI”) 
$con.open() 

$sqlcmd = new-object "System.data.sqlclient.sqlcommand" 
$sqlcmd.connection = $con 
$sqlcmd.CommandTimeout = 600000 
$sqlcmd.CommandText = “UPDATE dbo.tblPhotoID SET Changed = '1' WHERE Changed ='X'” 
$rowsAffected = $sqlcmd.ExecuteNonQuery() 
+0

Cela m'a aidé parce que je n'obtiens pas le délai d'attente. Mais la mise à jour ne met pas réellement à jour les données de la base de données. –

+0

J'ai vérifié deux fois le code sur ma machine (PowerShell 3.0) et j'ai trouvé que j'avais besoin d'ajouter un ensemble de parenthèses après l'appel de la méthode ExecuteNonQuery sinon j'ai eu une erreur. –

-1
$cn = New-Object System.Data.SqlClient.SqlConnection ("Integrated Security=SSPI;Persist Security Info=False;Initial Catalog.......) 
$q = "select ... from .. " 
$da = New-Object System.Data.SqlClient.SqlDataAdapter($q, $cn) 
$da.SelectCommand.CommandTimeout = 60 
+0

Ceci est basé sur Select ... ne fonctionne pas comme OP attendait une mise à jour. Une action qui n'a intrinsèquement pas besoin d'un DataAdapter ou d'un DataSet – GoldBishop