找不到接受参数System.Data.SqlClient.SqlDataReader的位置参数

时间:2014-12-18 17:46:08

标签: powershell

我正在尝试编写一个PowerShell脚本,它只是从我的管理数据库执行存储过程,但我遇到了这个:

New-Object : A positional parameter cannot be found that accepts argument 'System.Data.SqlClient.SqlDataReader'.
At C:\Scripts\Deployment\SPROCTest.ps1:19 char:15
+     $reader = New-Object -TypeName System.Data.SqlClient.SqlDataReader  = $GetEn ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidArgument: (:) [New-Object], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.NewObjectCommand

代码似乎很简单:

$connection = New-Object -TypeName System.Data.SqlClient.SqlConnection
$connection.ConnectionString = "Server=bhbrf95xva.database.windows.net;Database=MY.DATABASE;Integrated Security=False;User=theuser;Password=xxx^xxx"
$connection.Open()

$GetEnvironment = New-Object System.Data.SqlClient.SqlCommand
$GetEnvironment.CommandText = "Select_Environment_ByEnvironmentName"
$GetEnvironment.CommandType = [System.Data.CommandType]::StoredProcedure
$GetEnvironment.Connection = $connection

$ParamGetEnvironment = New-Object -TypeName System.Data.SqlClient.SqlParameter
$ParamGetEnvironment.ParameterName = "@EnvironmentName"
$ParamGetEnvironment.SqlDbType = [System.Data.SqlDbType]::VarChar
$ParamGetEnvironment.Direction = [System.Data.ParameterDirection]::Input
$ParamGetEnvironment.Value = 'TheValue'

$GetEnvironment.Parameters.Add($ParamGetEnvironment)


$reader = New-Object -TypeName System.Data.SqlClient.SqlDataReader  = $GetEnvironment.ExecuteReader()

$connection.Close()

我并不太关心这个脚本的实际格式,我只是想让它先工作,但我想知道为什么以及如何让它识别System.Data.SqlClient.SqlDataReader

我需要添加插件吗?

1 个答案:

答案 0 :(得分:1)

您无法初始化SqlDataReader。事实上,如果你查看documentation of SqlDataReader,你会发现它没有公共构造函数。

您只能将SqlDataReader作为调用SqlCommand.ExecuteReader的返回值。 你只需要写

 $reader = $GetEnvironment.ExecuteReader()

另外,请记住,关闭SqlDataReader使用的连接会有效削弱读者从数据库中读取数据的能力。因此,如果您计划对阅读器进行一些有用的操作,请在完成读取数据之前不要关闭连接。