【发布时间】:2021-09-16 12:29:56
【问题描述】:
我必须在 MS SQL Server 的表中重置名为“certRenewal”的列。我正在 Powershell 中尝试这个。基本上,我正在考虑的想法是在 DataTable 对象中获取整个表,然后遍历所有行并找到“certRenewal”在哪里 $true (它的位列)。并将其更改为 $false。这是代码。该代码没有给我任何错误,但它也没有更新 SQL Server 中的表。
param(
[string]$SQLServerName="ServerName\InstanceName"
,[string]$SQLDatabaseName="MyDataBase"
,[string]$SQLTableName = "UserList"
,[string]$SQLQuery1="SELECT * FROM $SQLTableName"
)
# Create connection
$sqlConn = New-Object System.Data.SqlClient.SqlConnection
$sqlConn.ConnectionString = “Server=$SQLServerName;Integrated Security=true;Initial Catalog=$SQLDatabaseName”
$sqlConn.Open()
# Get all users
$sqlCommand = $sqlConn.CreateCommand()
$sqlCommand.CommandText = $SQLQuery1
$dataAdapter = New-Object System.Data.SqlClient.SqlDataAdapter $sqlCommand
$dataTable = New-Object System.Data.DataTable
$dataAdapter.Fill($dataTable) | Out-Null
foreach($dataRow in $dataTable.Rows)
{
if($dataRow["certRenewal"] -eq $true)
{
$dataRow["certRenewal"] = $false
$dataTable.AcceptChanges()
}
}
$dataAdapter.Update($dataTable)
$sqlConn.Close()
我知道我也可以构建和发送更新命令,我不需要 DataAdapter。但我想知道是否通过 DataTable 并通过迭代所有行并更新行并将其保存为 DataTable,是否可以这样做?
【问题讨论】:
标签: powershell datatable sqldataadapter