我正在尝试编写一个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
?
我需要添加插件吗?
答案 0 :(得分:1)
您无法初始化SqlDataReader。事实上,如果你查看documentation of SqlDataReader,你会发现它没有公共构造函数。
您只能将SqlDataReader作为调用SqlCommand.ExecuteReader的返回值。 你只需要写
$reader = $GetEnvironment.ExecuteReader()
另外,请记住,关闭SqlDataReader使用的连接会有效削弱读者从数据库中读取数据的能力。因此,如果您计划对阅读器进行一些有用的操作,请在完成读取数据之前不要关闭连接。