我一直在使用dapper的一件事是将来自我们数据库的XML数据转换为字符串,然后按照我需要的方式在给定对象中反序列化它。
今天我遇到了一些事情,其中dapper返回了一个包含XML的字符串列表,只是它被拆分了。这是有意的吗?如果我希望返回一个单独的xml字符串,我应该编写这个吗?
以下是我调用proc的方法,如果执行proc,它会返回包含XML数据的单个结果,但是dapper在结果中返回2个字符串。如果我将它们连接起来,那么我会回到我期待的内容,但这似乎不是我应该连接的东西。
var result = conn.Query<string>(procName, parameters, commandType: CommandType.StoredProcedure);
编辑:每个评论请求,这里是正在返回的存储过程和示例数据。只有在XML数据达到一定大小时才会出现这种情况。较小批量的XML数据不会导致这种情况发生。这里提供的示例应该是足以触发它发生的数据。
usp_ListAllGroups
SELECT
(SELECT ClassificationItemID AS '@ID', GroupCN AS '*'
FROM UserGroup WITH (NOEXPAND)
FOR XML PATH('Group'), TYPE)
FOR XML PATH('Groups');
结果XML
<Groups>
<Group ID="4">SomeGroupName</Group>
<Group ID="9">SomeGroupName</Group>
<Group ID="2">SomeGroupName</Group>
<Group ID="553">SomeGroupName</Group>
<Group ID="447">SomeGroupName</Group>
<Group ID="435">SomeGroupName</Group>
<Group ID="395">SomeGroupName</Group>
<Group ID="489">SomeGroupName</Group>
<Group ID="468">SomeGroupName</Group>
<Group ID="408">SomeGroupName</Group>
<Group ID="455">SomeGroupName</Group>
<Group ID="443">SomeGroupName</Group>
<Group ID="524">SomeGroupName</Group>
<Group ID="414">SomeGroupName</Group>
<Group ID="430">SomeGroupName</Group>
<Group ID="423">SomeGroupName</Group>
<Group ID="511">SomeGroupName</Group>
<Group ID="482">SomeGroupName</Group>
<Group ID="154">SomeGroupName</Group>
<Group ID="236">SomeGroupName</Group>
<Group ID="244">SomeGroupName</Group>
<Group ID="367">SomeGroupName</Group>
<Group ID="547">SomeGroupName</Group>
<Group ID="134">SomeGroupName</Group>
<Group ID="309">SomeGroupName</Group>
<Group ID="26">SomeGroupName</Group>
<Group ID="128">SomeGroupName</Group>
<Group ID="335">SomeGroupName</Group>
<Group ID="322">SomeGroupName</Group>
<Group ID="164">SomeGroupName</Group>
<Group ID="190">SomeGroupName</Group>
<Group ID="30">SomeGroupName</Group>
<Group ID="121">SomeGroupName</Group>
<Group ID="276">SomeGroupName</Group>
<Group ID="260">SomeGroupName</Group>
<Group ID="83">SomeGroupName</Group>
<Group ID="71">SomeGroupName</Group>
<Group ID="591">SomeGroupName</Group>
<Group ID="358">SomeGroupName</Group>
<Group ID="179">SomeGroupName</Group>
<Group ID="113">SomeGroupName</Group>
<Group ID="148">SomeGroupName</Group>
<Group ID="299">SomeGroupName</Group>
<Group ID="209">SomeGroupName</Group>
<Group ID="229">SomeGroupName</Group>
<Group ID="8">SomeGroupName</Group>
<Group ID="54">SomeGroupName</Group>
<Group ID="40">SomeGroupName</Group>
<Group ID="3">SomeGroupName</Group>
<Group ID="1">SomeGroupName</Group>
</Groups>
答案 0 :(得分:0)
要从存储过程中读取XML,可以使用SqlCommand.ExecuteXmlReader方法,该方法返回2,033个字符的行。这是设计的。我没有看过Dapper代码,但是从我的测试来看,似乎Dapper实现了这个非常酷。