get-datatable.ps1 is an improvement on the get-dataset.ps1 from an earlier post. Instead of returning a dataset it returns a DataTable; and a UpdateSql method is added to the object returned, so you don't need a separate script to send the changes back to sql.
This allows updates to a small table to look like:
$t = datatable "select * from stuff" -db foo$t | %{ .... update the data rows ... }$t.UpdateSql()
Get-DataTable.ps1:
param ($sql,$server=".",$db) $connectionstring= "Server=$server;database=$db;trusted_connection=yes;" $dt = new-object data.DataTable $da = New-Object system.data.sqlclient.sqldataadapter $sql, $connectionstring $null = $da.Fill($dt) $dt.ExtendedProperties["sql"]= $sql $dt.ExtendedProperties["connectionstring"]= $connectionstring $dt = add-member ScriptMethod UpdateSql { $da = New-Object system.data.sqlclient.sqldataadapter $this.ExtendedProperties["sql"], $this.ExtendedProperties["connectionstring"] $cb = new-object system.data.sqlclient.sqlcommandbuilder $da $da.UpdateCommand = $cb.GetUpdateCommand() $da.InsertCommand = $cb.GetInsertCommand() $da.DeleteCommand = $cb.GetDeleteCommand() $null = $da.Update($this) } -in $dt -pass #return data table in array so table doesn't get decomposed into an array of data rows. ,$dt