gpt4 book ai didi

c# - 使用 Dapper 从 T-SQL 存储过程返回 XML 字符串

转载 作者:数据小太阳 更新时间:2023-10-29 02:21:40 26 4
gpt4 key购买 nike

我正在从事一个将大型 VB6 应用程序转换为 .NET 的项目。我决定创建一个项目来为现有的 VB6 ADO 代码提供外观,我在其中使用令人惊叹的 Dapper 扩展方法来处理 VB6 ADO 函数过去执行的所有数据库代码。

我必须在我的新项目中支持的功能之一是能够从 T-SQL 存储过程(通过 FOR XML)获取 XML 字符串结果。 Dapper 不支持返回我可以看到的这个 XML。因此,我实现了 ADO.NET ExecuteXmlReader 方法来提供此返回值。我的项目还使用 Dapper DynamicParameters 来捕获存储过程所需的所有输入/输出参数。

我不知道该怎么做,是如何将 DynamicParameters 转换为 SqlCommand.SqlParameterCollection,以便我可以将这些参数填充到 ExecuteXmlReader 方法的 SqlCommand 对象。对于这种情况,我还必须支持输出参数。

我可以遍历 DynamicParameters,但这只会让我获得参数名称和值。我还需要方向、类型、大小、比例和精度。 Dapper 有一个 DynamicParameters.ReplaceLiterals 方法,该方法采用 IDbCommand 对象来替换 SQL 字符串中的文字。我希望它有一种方法也可以填写参数。

我在这里遗漏了什么明显的东西吗?如果我调用 Dapper Execute 方法,我可以将 DyanmicParameters 直接传递到此方法中。我只是没有看到如何将它们传递给 SqlCommand 对象。

最佳答案

经过测试,我发现Dapper确实支持从存储过程中提取XML。

var result = conn.Query<string>(@"select * from <someTable> for xml auto");

这将返回一个字符串数组,每个元素最多包含 2,033 个字符,您可以简单地连接这些元素以将结果作为单个字符串。

var fullResult = string.Join("", result);

var fullResult = string.Concat(result);

或者,一步到位:

var result = string.Concat(conn.Query<string>(
@"select * from <someTable> for xml auto", buffered: false));

这样,我就不需要自己实现ExcuteXmlReader方法了,可以让Dapper正常处理参数了。

关于c# - 使用 Dapper 从 T-SQL 存储过程返回 XML 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43127605/

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