現在のタスクを自動化するために、Powershell 2.0を使用して一連のカスタム.Net 2.0アセンブリとやりとりしています。必要なDLLをすべて読み込み、dllメソッドを呼び出して、System.Data.SqlDataReaderを取得します。同じカスタムアセンブリ内のコンストラクタにSqlDataReaderを渡すと、「リーダーが閉じているときにHasRowsを呼び出すための無効な試行」が表示されます。例外。Powershell 2.0 - 関数に渡すとSqlDataReaderが終了する
コードサンプル:
dir D:\stuff\*.dll | foreach { [Reflection.Assembly]::LoadFrom($_.FullName) } | out-null
[CustomAssembly.DataConfig]::ConnectionString = "Valid Connection String"
$reader=[CustomAssembly.DAL.Thing]::Get(123)
new-object CustomAssembly.BusinessObjects.Thing($reader)
$リーダーが開いている、と私は事のコンストラクタを呼び出す前に、データを持っています。
私は何かを逃しているに違いないが、私はそれが何であるか分からない。
編集1:
$リーダーが表示されますが、読み取り、およびPowerShellでまたはアセンブリで、それが関数に渡され、いつでもをクローズします。これを防ぐ方法はありますか?
編集2:
Powershellの自動展開ストライキ再び
How to stop PowerShell from unpacking an Enumerable object?
Strange behavior in PowerShell function returning DataSet/DataTable
次の修正されたコードサンプルは、単一の素子アレイに結果をラップすることによって動作し、そう自動アンローリングはSqlDataReaderに影響しません。 "$ reader ="ステートメントの後に単一のカンマがあることに注意してください。それはタイプミスではありません。
dir D:\stuff\*.dll | foreach { [Reflection.Assembly]::LoadFrom($_.FullName) } | out-null
[CustomAssembly.DataConfig]::ConnectionString = "Valid Connection String"
$reader=,[CustomAssembly.DAL.Thing]::Get(123)
new-object CustomAssembly.BusinessObjects.Thing($reader)
これは、SqlDataReaderの場合のようです。それを防ぐ方法はありますか? – Jared314
それを防ぐ方法がないので、別の配列でラップしなければならないように見えます。 – Jared314