2011-06-24 66 views
1

我在一个varchar(max)字段中存储HTML可以有很多这些字段在数据集中返回我需要基本上将它们串入一个字符串,所以我可以将它们添加到我的控制任何想法的?如何将查询结果转换为字符串c#

因此,例如

result 1: <h5> This is a result </h5> 
result 2: <h5> This is a result </h5> 
result 3: <h5> This is a result </h5> 
result 4: <h5> This is a result </h5> 

我需要设置为被解析到会像一个字符串的结果:

<h5> This is a result </h5> 
<h5> This is a result </h5> 
<h5> This is a result </h5> 
<h5> This is a result </h5> 

我从一个存储过程返回的结果,因为我将是允许用户只执行存储过程,并且不会有任何表权限

+0

您在后端使用哪个程序?换句话说: –

+0

:你有x个字符串,并希望他们concatinated?如果是这样,那么一个stringbuilder呢? – DarkSquirrel42

+1

我不太明白这个问题。我认为语法阻碍了它。 – Noldorin

回答

0

在SQL存储过程中,您可以执行以下操作

DECLARE @PartHTML VARCHAR(MAX) 
DECLARE @FullHTML VARCHAR(MAX) 

DECLARE CURSOR HTMLCursor FOR (SELECT FieldWithHTML FROM TableWithHTML) 
OPEN CURSOR HTMLCursor 

FETCH NEXT FROM HTMLCursor INTO @PartHTML 

While (@@FETCH_STATUS <> -1) 
BEGIN 
    SET @FullHTML = @FullHTML + @PartHTML + CHAR(13) 
    FETCH NEXT FROM HTMLCursor INTO @PartHTML 

END 
CLOSE HTMLCursor 
DEALLOCATE HTMLCursor 
1
string results = someStoredProcCall(); 
results = Regex.Replace(results, @"result [0-9]+: ", ""); 
+0

如果我正确地理解了他,“result x”没有被返回,这仅仅是他如何标记返回的行。 – Cyberherbalist

+0

@Cyber​​herbalist那可能是。我不完全明白他在问什么(显然没有其他人会这么做),但这就是我对它的解释。 – ean5533

0

你可以使用LINQ:

string[] results = ... 
string resultsStr = results.Aggregate((a,b) => a + b); 

或...

MyEntity[] results = ... 
string resultsStr = results.Select(r => r.SomeColumn).Aggregate((a,b) => a + b); 
1

如果我理解正确的问题,你的HTML将在数据库中,需要在控制中呈现?如果是的话,我会设置一个文字控件,当加载数据时,设置文字的属性来渲染存储的HTML结果。

StringBuilder sb = new StringBuilder(); 
for(int i = 0; i < dsResults.Tables[0].Rows.Count - 1; i++) 
{ 
    sb.Append(PrepareResult(dsResults.Tables[0].Rows[i][0].ToString())); 
} 

litControl.Text = sb.ToString(); 


public string PrepareResult(string result) 
{ 
    return result.Substring(result.IndexOf("<")); 
} 

这是免费的手写代码,所以您可能需要稍微调整,我认为这个概念很清楚。 HTH

+0

字符串是不可变的,因此每次循环迭代时,这段代码都会继续分配一组新的内存。 –

+0

@本·罗宾逊 - 是更好的:)我认为它回答了这个问题,但你认为呢?感谢您指出了这一点。 – webtrifusion

+0

是的,这是更好的;-) –