2017-08-09 38 views
0

我想通過使用Powershell連接從SQL Server中獲取表計數,但我得到了下面的錯誤消息,但如果我只是選擇在表上而不是計數然後相同的代碼返回結果,請建議,因爲我沒有得到解決這個問題的方法。Powershell連接到SQL服務器和計數提取

錯誤消息:

異常調用「填充」與「1」的參數(一個或多個):「執行超時 過期的 操作或服務器完成之前經過的超時週期沒有響應「。 (數據集) + ~~~~~~~~~~~~~~~~~~ ,MethodInvocationException + FullyQualifiedErrorId:SQLEXCEPTION

腳本:

[string] $Server= "Server_nm" 
    [string] $Database = "DB_nm" 
    [string] $UserSqlQuery = $("SELECT count(1) AS cnt FROM [tbl]") 


##$resultsDatatable = ExecuteSqlQuery $Server $Database $UserSqlQuery 

function GenericSqlQuery ($Server, $Database, $SQLQuery) { 
$Datatable = New-Object System.Data.DataTable 

$Connection = New-Object System.Data.SQLClient.SQLConnection 
$Connection.ConnectionString = "server='$Server';database='$Database';trusted_connection=true;" 
$Connection.Open() 
$Command = New-Object System.Data.SQLClient.SQLCommand 
$Command.Connection = $Connection 
$Command.CommandText = $SQLQuery 

$DataAdapter = new-object System.Data.SqlClient.SqlDataAdapter $Command 
$Dataset = new-object System.Data.Dataset 
$DataAdapter.Fill($Dataset) 
$Connection.Close() 

return $Dataset.Tables[0] 
} $resultsDatatable = GenericSqlQuery $Server $Database $UserSqlQuery 
#validate we got data 

Write-Host ("The table contains: " + $resultsDatatable.Rows.Count + " rows") 

回答

0

可以使用Invoke-Sqlcmd函數。

# initialize Variables 
[string] $Server= "Server_nm" 
[string] $Database = "DB_nm" 
[string] $UserSqlQuery = $("SELECT count(1) AS cnt FROM [tbl]") 

# Invoke-SqlCmd 
$resultsDatatable = Invoke-Sqlcmd -ServerInstance $Server -Database $Database -Query $UserSqlQuery 

# validate we got data 
Write-Host ("The table contains: " + $resultsDatatable.cnt + " rows")