2013-10-14 115 views
4

我試圖連接到Microsoft SQL數據庫並更新任何記錄,更改字段是='x'。我能夠查詢數據庫,但是當我嘗試進行更新時,出現此錯誤Powershell SQL服務器更新查詢

填充:使用「1」參數調用「填充」的異常:「超時已過期。操作完成或服務器沒有響應。「

#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) 

當前有大約4000條記錄被更新。腳本在超時前運行約30秒。我試着增加命令超時並獲得相同的結果。

+0

如果你嘗試更新一條記錄,會發生什麼? –

回答

17

您的更新語句不會返回記錄集,因此沒有任何內容可以填充數據集。你不是想嘗試以下方法:

#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

這有助於我沒有超時。但更新並不實際更新數據庫中的任何數據。 –

+0

我仔細檢查了我的機器上的代碼(PowerShell 3.0),我發現我需要在ExecuteNonQuery方法調用後添加一組括號,否則我得到一個錯誤。 –

-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

這是基於Select ...不能像OP期望的那樣工作。本質上不需要DataAdapter或DataSet的操作 – GoldBishop