我正在编写一个简单的查询功能,以使我的脚本高效而简单,因为我以后开始编写更多查询。
Function Query($Query) {
$connectionString = "Provider=msolap;Data Source=$Server;Initial Catalog=$Database;"
$connection = New-Object System.Data.OleDb.OleDbConnection $connectionString
$command = New-Object System.Data.OleDb.OleDbCommand
$command.Connection = $connection
$command.CommandText = $Query
$connection.Open()
$adapter = New-Object System.Data.OleDb.OleDbDataAdapter #$command
$adapter.SelectCommand = $command
$dataset = New-Object System.Data.DataSet
[void] $adapter.Fill($dataSet)
$connection.Close()
$dataSet.Tables[0]
}
查询
SELECT [SESSION_ID], [SESSION_SPID]
FROM $SYSTEM.DISCOVER_SESSIONS";
我收到此错误:
使用“ 1”参数调用“填充”的异常:“查询(1,41)'的语法。不正确。(从.DISCOVER_SESSIONS中选择[SESSION_ID],[SESSION_SPID])。“
+ [void] $ adapter.Fill($ dataSet)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo:未指定:(:) [],MethodInvocationException
+ FullyQualifiedErrorId:OleDbException
我想念什么吗?我遵循每个MSDocs的语法:
实际上,我没有创建查询功能就成功地尝试了它,并显示了结果。以某种方式使其成为查询功能不起作用...
答案 0 :(得分:1)
使用单引号字符串:
Query 'SELECT [SESSION_ID],[SESSION_SPID] FROM $SYSTEM.DISCOVER_SESSIONS';
在Powershell中,用双引号引起来的字符串进行字符串插值,即,字符串中的$SYSTEM
被变量SYSTEM
的值替换,或者在这种情况下为{{ 1}}未定义。