2

如果我执行以下操作,

PS > $a = Invoke-Sqlcmd -ServerInstance <blah> -Database <blah> -Query "SELECT <blah>"

(其中只是有效内容的占位符)

然后返回的类型如下所示:

PS > $a.gettype()

IsPublic IsSerial Name                         BaseType        
-------- -------- ----                         --------        
True     True     Object[]                     System.Array    

理想情况下,我想将 $a 传递给一个接受 System.Data.DataSet (或类似)形式的 .NET 类型的函数。

有关详细信息,我正在使用 Chad Miller 的 SQLPS 模块,该模块在 Windows 7 下的 PowerShell 2 上包装了早期 SQL Server (SQL Server 2008) 的官方 MS 发行版。

我怀疑这可能与装箱和拆箱有关,但我不清楚。

有没有办法将查询结果作为 System.Data.DataSet 类型返回?

4

3 回答 3

3

从 2016 年 7 月版本的 sqlps 开始,您可以简单地执行以下操作:

Invoke-Sqlcmd "select 1 as foo" -OutputAs DataTables

好东西!

于 2016-11-28T15:39:58.060 回答
1

这是一种返回不使用 [dataset] 类型invoke-sqlcmd的方法(找不到方法...)

$sql="SELECT <blah> FROM <dbo.blah>"
$connectionstring= "Server='myblahserver';database='blah';trusted_connection=yes;" 
$ds = new-object data.dataset 
$da = New-Object system.data.sqlclient.sqldataadapter $sql, $connectionstring 
$null = $da.Fill($ds) 
$ds.ExtendedProperties["sql"]= $sql 
$ds.ExtendedProperties["connectionstring"]= $connectionstring 
$ds
于 2013-02-04T17:20:18.863 回答
0

我发现这样做的唯一方法是使用此处提供的代码创建一个用于将数组转换为数据表的函数:

https://gallery.technet.microsoft.com/scriptcenter/4208a159-a52e-4b99-83d4-8048468d29dd

加载此函数后,您可以获取 invoke-sqlcmd 的结果并将其传递到函数中,如下所示:

$results = Invoke-Sqlcmd -inputfile $scriptpath -ServerInstance $instance
$dt = $results | Out-Datatable
于 2015-10-09T01:00:37.797 回答