我使用以下PowerShell函数对SQL Server实例运行任意SQL查询,然后返回任何数据:
Function ExecSQLReader([string] $sqlText) {
$cn = New-Object System.Data.SqlClient.SqlConnection
$cn.ConnectionString = "Data Source={0};Initial Catalog={1};Integrated Security=SSPI;" -f $fc.server,$fc.database
$cn.Open()
$cmd = $cn.CreateCommand()
$cmd.CommandText = $sqlText
$cmd.CommandTimeout = 60
$resTable = New-Object("System.Data.DataTable")
try {
$result = $cmd.ExecuteReader()
$resTable.Load($result)
$result.Close()
$cn.Close()
} catch {
"=======ERROR in ExecSQLReader========" | DoLog
"Message: {0}" -f $_.Exception.Message | DoLog
"SQL: {0}" -f $sqlText | DoLog
"=======/ERROR in ExecSQLReader=======" | DoLog
}
return($resTable)
}
当查询返回数据时,该函数可以正常工作。
但是,当查询没有返回数据时,该函数不会返回任何与列相关的信息。
即使没有数据行,我也需要知道列名/类型/顺序等。
我可以看到返回的值根据结果记录计数而不同(这会使事情变得更复杂):
所以,问题是:如何确保返回的对象始终是" System.Data.DataTable"类型?
或者,至少,如何确保与列相关的信息(名称,类型,顺序)始终在函数结果中可用,而不管查询返回的行数是多少?
任何提示?
答案 0 :(得分:2)
从PowerShell函数返回集合时,这是一个常见的问题。要解决此问题,请在返回值之前添加逗号:
public void executeJavascript(String script) {
((JavascriptExecutor) driver).executeScript(script);
}
如果查询没有返回任何行,则DataTable将包含源查询模式,但行数为零。