首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

PowerShell 在 SQL Server 2008 管理實戰:不依賴 Snap-in 的 ADO.NET 直連腳本

     編輯:關於SqlServer

純 .NET 類別庫操作 SQL Server:零相依、跨版本、極輕量

不載入 `SqlServerCmdletSnapin100`,直接用 `System.Data.SqlClient` 命名空間,**任何裝 .NET Framework 的機器即可執行**,適合跳板機、CI/CD Agent、無完整 SQL 管理工具的環境。

函數一:列出使用者資料表

function Show-CustomizedDataTable {
    $SQLServer = Read-Host "Enter SQL Server Name"
    $Database  = Read-Host "Enter Database Name"
    $CnnString = "Server=$SQLServer;Database=$Database;Integrated Security=True"
    
    $conn = New-Object System.Data.SqlClient.SqlConnection
    $conn.ConnectionString = $CnnString
    
    $cmd = New-Object System.Data.SqlClient.SqlCommand
    $cmd.CommandText = "SELECT name FROM sysobjects WHERE type='U' ORDER BY name"
    $cmd.Connection = $conn
    
    $adapter = New-Object System.Data.SqlClient.SqlDataAdapter
    $adapter.SelectCommand = $cmd
    
    $ds = New-Object System.Data.DataSet
    $adapter.Fill($ds) | Out-Null
    $conn.Close()
    
    $ds.Tables[0] | Format-Table -AutoSize
}

函數二:執行任意查詢回傳 DataTable

function Get-DataTable {
    param([string]$Query, [string]$ConnString)
    $ds = New-Object System.Data.DataSet
    $da = New-Object System.Data.SqlClient.SqlDataAdapter($Query, $ConnString)
    [void]$da.Fill($ds)
    return $ds.Tables[0]
}

# 使用範例
$connStr = "Server=.;Database=AdventureWorks;Integrated Security=True"
$dt = Get-DataTable "SELECT TOP 10 * FROM Person.Person" $connStr
$dt | Format-Table -AutoSize

進階模式:參數化查詢、交易控制、非同步

function Invoke-SqlCmdParam {
    param([string]$ConnString, [string]$Query, [hashtable]$Params)
    $conn = New-Object System.Data.SqlClient.SqlConnection($ConnString)
    $cmd = $conn.CreateCommand()
    $cmd.CommandText = $Query
    foreach ($p in $Params.GetEnumerator()) {
        $cmd.Parameters.AddWithValue($p.Key, $p.Value) | Out-Null
    }
    $conn.Open()
    $reader = $cmd.ExecuteReader()
    $dt = New-Object System.Data.DataTable
    $dt.Load($reader)
    $reader.Close()
    $conn.Close()
    return $dt
}

# 呼叫
$params = @{ '@City' = 'London'; '@MinOrders' = 5 }
$dt = Invoke-SqlCmdParam $connStr "SELECT * FROM Sales.vCustomerOrders WHERE City = @City AND OrderCount >= @MinOrders" $params

為何不直接用 `Invoke-Sqlcmd` (sqlps 模組)?

  • `sqlps` 模組載入極慢 (數十秒)、相依性重、版本綁定。
  • 純 ADO.NET **啟動即用、記憶體佔用極低、支援 .NET Core / PowerShell 7+**。
  • 生產自動化腳本建議**標準化封裝為模組**,統一連線字串管理 (Key Vault/環境變數)、錯誤處理、記錄。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved