Powershell を使用して、非常に大きな CSV ファイルを SQL Server にロードしようとしています。コードは、さまざまな区切り文字、EOR、および EOF マーカーを許可して、その場で正規表現置換を適用する必要もあります。メンテナンスのために、アセンブリをインポートせずに、このすべてのロジックが Powershell に存在することを本当に望んでいます。
効率的にするには、SQLBulkCopy メソッドを使用する必要があることはわかっています。しかし、私が見る Powershell の例はすべて、DataTable を埋めてそれを渡しますが、ファイル サイズが原因で私には不可能です。
StreamReader を Idatareader でラップしてから、それを SQLBulkcopy に渡す必要があると確信しています。これが C# で実装された素晴らしい例をいくつか見つけまし
た
。
C# アセンブリをインポートせずに、ネイティブ PowerShell を使用してこの機能を実現することは可能ですか? 特に、抽象クラス ラッパーの変換に苦労しています。
これは、これまでに IdataReader を渡さず、メモリ制限を破るコードです。
function Get-CSVDataReader()
{
param (
[string]$path
)
$parsedData = New-Object 'System.Collections.Generic.List[string]'
#List<string[]> parsedData = new List<string[]>()
$sr = new-object IO.StreamReader($path)
while ($line = $sr.ReadLine())
{
#regex replace and other logic here
$parsedData.Add($line.Split(','))
}
,$parsedData #if this was an idatareader, the comma keeps it from exploding
}
$MyReader = Get-CSVDataReader('This should not fill immediately. It needs a Read Method.')
助けてくれてありがとう。