Sql server 使用SqlDataAdapter和DataTable在带有PowerShell的SQL server上获取和更新

Sql server 使用SqlDataAdapter和DataTable在带有PowerShell的SQL server上获取和更新,sql-server,powershell,datatable,sqldataadapter,Sql Server,Powershell,Datatable,Sqldataadapter,我正在尝试使用PowerShell从SQL server获取System.Data.DataTable,编辑数据并将其更新回SQL server,但无法使其正常工作。以下代码运行/执行,但数据未更改 $sqlConnection = new-object System.Data.SqlClient.SqlConnection("Server=server,1234; Database=dingo; Trusted_Connection=True;") $sqlConnection.open()

我正在尝试使用PowerShell从SQL server获取
System.Data.DataTable
,编辑数据并将其更新回SQL server,但无法使其正常工作。以下代码运行/执行,但数据未更改

$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()
你不应该在同一行打电话,而是需要打电话

调用
AcceptChanges
时,它会结束编辑,但会将行标记为
未更改
,因此
数据适配器将不会处理该行,因为它标记为未更改

调用
AcceptChanges
时,隐式调用
EndEdit
方法 以结束任何编辑。如果行的
RowState
已添加
已修改
行状态变为
未更改
。如果
行状态
已被
删除
,则该行 被移除


这就解决了问题。非常感谢。