12

PowerShell からMicrosoft.Data.Schema.ScriptDom.Sql.Sql100ScriptGeneratorのGenerateScriptメソッドを呼び出したいだけです。

#C

public void GenerateScript(
    IScriptFragment scriptFragment,
    out string script
)

これを見つけましが、動作しません

$sg = new-object  Microsoft.Data.Schema.ScriptDom.Sql.Sql100ScriptGenerator

$sql = 'select * from PowerShell'

$out = ''
$sg.GenerateScript($sql, [ref] $out)

$out

これは与える

Cannot find an overload for "GenerateScript" and the argument count: "2".
At line:6 char:19
+ $sg.GenerateScript <<<< ($sql, [ref] $out)
    + CategoryInfo          : NotSpecified: (:) [], MethodException
    + FullyQualifiedErrorId : MethodCountCouldNotFindBest

編集:

現在のバージョンは

$sql = 'select * from PowerShell'

$sr = new-Object System.IO.StringReader($sql)

$sg =     new-object Microsoft.Data.Schema.ScriptDom.Sql.Sql100ScriptGenerator
$parser = new-object Microsoft.Data.Schema.ScriptDom.Sql.TSQL100parser($true)

$errors = ''
$fragment = $parser.Parse($sr,([ref]$errors))

$out = ''
$sg.GenerateScript($fragment,([ref][string]$out))

$out

しかし、私はラインでエラーが発生します

$fragment = $parser.Parse($sr,([ref]$errors))



Cannot find an overload for "Parse" and the argument count: "2".
At line:11 char:26
+ $fragment = $parser.Parse <<<< ($sr,([ref]$errors))
    + CategoryInfo          : NotSpecified: (:) [], MethodException
    + FullyQualifiedErrorId : MethodCountCouldNotFindBest

変換しようとしています

    IList<ParseError> errors;

    using (StringReader sr = new StringReader(inputScript))
    {
        fragment = parser.Parse(sr, out errors);
    }

編集:

OKこれは動作します:

$sql = @'
select * from PowerShell -- a comment
where psRefnr = 1
'@
$options = new-object Microsoft.Data.Schema.ScriptDom.Sql.SqlScriptGeneratorOptions

$sr = new-Object System.IO.StringReader($sql)

$sg =     new-object Microsoft.Data.Schema.ScriptDom.Sql.Sql100ScriptGenerator($options)
$parser = new-object Microsoft.Data.Schema.ScriptDom.Sql.TSQL100parser($true)

$errors = $null
$fragment = $parser.Parse($sr,([ref]$errors))

$out = $null
$sg.GenerateScript($fragment,([ref]$out))

$out

生成します(意図したとおりにコメントを削除します)

SELECT *
FROM   PowerShell
WHERE  psRefnr = 1;
4

2 に答える 2

3

あなたの問題は最初のパラメータにあると思います。それはIScriptFragmentであるはずです。文字列を渡しています。

TSqlFragmentから派生したものを渡す必要があります。TSql100Parser.ParseStatementListメソッドのようなものを使用して、フラグメントのリストを取得します。

編集:このブログ投稿には、2番目のエラーと同様の問題があります。

于 2011-03-11T18:44:43.737 に答える
1

これが Powershell でどのように機能するかは完全にはわかりませんが、通常の C# では、「ref」の代わりにキーワード「out」を使用して out パラメータを呼び出す必要があります。これがベースから外れている場合は申し訳ありませんが、役立つかもしれないと考えました。

于 2011-03-11T18:15:07.073 に答える