我正在使用SMO與PowerShell腳本一起執行一些SQL Server編程。下面列出了我的腳本的簡化版本。SQL Server SMO編程,在哪裏設置CommandTimeout屬性?
# Load SMO assembly, and if we're running SQL Server 2008 DLLs load the SMOExtended and SQLWMIManagement libraries
$v = [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO");
if ((($v.FullName.Split(','))[1].Split('='))[1].Split('.')[0] -ne '9') {
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMOExtended") | out-null;
}
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SmoEnum') | out-null;
$server = New-Object ("Microsoft.SqlServer.Management.Smo.Server") ".\sql2014";
$server.Databases["master"].ExecuteWithResults("select * from sys.database_files");
現在
我的劇本總是超時,我用Google搜索周圍對互聯網和發現,我應該在我的代碼設置CommandTimeout
property地方。
然而,物業CommandTimeout
是SqlCommand
。我使用SMO執行查詢的方式沒有SqlCommand
對象。正如你所看到的,我可以直接在$server.Databases["master"]
上執行。
誰能幫助指出我應該設置CommandTimeout
財產?
謝謝。
幾個樣式註釋 - 嘗試'import-module SQLPS -DisableNameChecking'而不是所有反射的LoadWithPartialName東西。另外,如果你打算最終選擇數據文件,實際上使用SMO模型:數據庫有FileGroups,FileGroups又有文件。數據庫也有LogFiles。但最終,你想使用這些東西的對象表示,而不是試圖解析你的即席查詢的輸出。 –