我之前问过这个问题。但我无法得到任何答案。可能我不是很清楚。让我提供一些细节。
我有一个返回长字符串的SP。这是dbml文件代码
[Function(Name="dbo.spX")]
public ISingleResult<spXResult> spX([Parameter(DbType="VarChar(8000)")] string str)
{
IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), str);
return ((ISingleResult<spXResult>)(result.ReturnValue));
}
这是spXResult类
public partial class spXResult
{
private string _XML_F52E2B61_18A1_11d1_B105_00805F49916B;
public spXResult()
{ }
[Column(Name="[XML_F52E2B61-18A1-11d1-B105-00805F49916B]",
Storage="_XML_F52E2B61_18A1_11d1_B105_00805F49916B",
DbType="NText", UpdateCheck=UpdateCheck.Never)]
public string XML_F52E2B61_18A1_11d1_B105_00805F49916B
{
get
{
return this._XML_F52E2B61_18A1_11d1_B105_00805F49916B;
}
set
{
if ((this._XML_F52E2B61_18A1_11d1_B105_00805F49916B != value))
{
this._XML_F52E2B61_18A1_11d1_B105_00805F49916B = value;
}
}
}
}
这是我的代码
ISingleResult<spXResult> result = ctx.spX("1234");
string returnStr = result.First().XML_F52E2B61_18A1_11d1_B105_00805F49916B;
一切都很好,当结果不是长字符串时,但只要sp返回一个很长的字符串,它就会截断结果。我不知道为什么......有人可以帮忙。
感谢
答案 0 :(得分:1)
我能发现的唯一可疑的是这个 - 在宣言中,你好了:
public ISingleResult<spXResult> spX([Parameter(DbType="VarChar(8000)")] string str)
(DbType = VARCHAR(8000)) - 这是ANSI(非Unicode),但是在列声明中你使用NTEXT - 首先,那是UNICODE(每个字符2个字节),以及为什么NTEXT ??上面你有VARCHAR?
[Column(Name="[XML_F52E2B61-18A1-11d1-B105-00805F49916B]",
Storage="_XML_F52E2B61_18A1_11d1_B105_00805F49916B",
DbType="NText", UpdateCheck=UpdateCheck.Never)]
这看起来有点奇怪.......
你能尝试在两个地方做同样的事情吗?例如。两种情况下都是VARCHAR(8000)??
马克
答案 1 :(得分:1)
LinqToSql将XML结果集拆分为块,因此您需要运行如下循环:
ISingleResult<spXResult> result = ctx.spX("1234");
string xml = "";
foreach (var x in result)
xml += x.XML_F52E2B61_18A1_11d1_B105_00805F49916B;
或使用LINQ:
string xml = result.Aggregate("", (current, x) => current + x.XML_F52E2B61_18A1_11d1_B105_00805F49916B);
答案 2 :(得分:0)
只需从
更改你的spSELECT ...
FROM MyTable
FOR XML AUTO
到
DECLARE @ResultXML xml
SET @ResultXML =
(SELECT ...
FROM MyTable
FOR XML AUTO)
SELECT @ResultXML as [MyXML]
并重新创建linq方法