2017-11-24 2 views
1

Ich versuche, Powershell zu verwenden, um ein System.Data.DataTable von einem SQL Server zu erhalten, bearbeiten Sie die Daten, und es zurück an den SQL-Server aktualisieren, aber ich kann es nicht an der Arbeit . Der folgende Code wird ausgeführt/ausgeführt, aber die Daten werden nicht geändert.Verwenden SqlDataAdapter und Datatable zu erhalten und upated auf SQL Server mit Powershell

$sqlConnection = new-object System.Data.SqlClient.SqlConnection("Server=server,1234; Database=dingo; Trusted_Connection=True;") 
$sqlConnection.open() 

$sqlCommand = $sqlConnection.CreateCommand() 
$sqlCommand.CommandText = "SELECT * FROM dbo.test" 

$dt = new-object System.Data.DataTable 
$adapter = new-object System.Data.SqlClient.SqlDataAdapter($sqlCommand) 

$adapter.Fill($dt) 

# edit the rows 
$dt.Rows[0].BeginEdit() 
$dt.Rows[0]["a"] = "nacho" 
$dt.Rows[0].AcceptChanges() 

# command builder 
$cb = new-object system.data.sqlclient.sqlcommandbuilder($adapter) 

$adapter.UpdateCommand = $cb.GetUpdateCommand() 


$adapter.Update($dt) 

$sqlConnection.Close() 

Antwort

1

Sie sollten AcceptChange auf die Zeile nicht nennen, stattdessen Sie EndEdit anrufen müssen.

Bei Aufruf AcceptChanges wird die Bearbeitung beendet, aber die Zeile wird als Unchanged markiert. Daher wird sie nicht von der DataAdapter verarbeitet, da sie als unverändert markiert ist.

Wenn AcceptChanges Aufruf wird die EndEdit Verfahren implizit enden alle Bearbeitungen genannt. Wenn die RowState der Zeile oder Modified, ist, wird die RowState wird Unchanged. Wenn die RowStateDeleted war, wird die Zeile entfernt.

+0

Das hat es behoben. Vielen Dank! – IMTheNachoMan

Verwandte Themen