gpt4 book ai didi

.net - 如何使用输出参数调用 .net 方法?

转载 作者:行者123 更新时间:2023-12-04 04:27:22 27 4
gpt4 key购买 nike

我只想打生成脚本 Microsoft.Data.Schema.ScriptDom.Sql.Sql100ScriptGenerator的方法|来自 PowerShell。

#C

public void GenerateScript(
IScriptFragment scriptFragment,
out string script
)

我找到了 this ,但我没有让它工作
$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);
}

编辑:

好的,这有效:
$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;

最佳答案

我相信你的问题在于你的第一个参数,它应该是一个 IScriptFragment。您正在传递一个字符串。

您需要传递源自 TSqlFragment 的内容。 .使用类似 TSql100Parser.ParseStatementList方法,你会得到一个片段列表。

编辑:这个blog post与您的第二个错误有类似的问题。

关于.net - 如何使用输出参数调用 .net 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5276700/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com