在.NET / C#中从数据库检索的子串值

时间:2011-05-16 09:03:52

标签: c# .net database while-loop

我正在使用以下内容从我的数据库中读出值:

    while (reader.Read())
    {
        newsLabel.Text += "<div style='float:left;'>" + reader["body"] + "</div>";
    }

我在想。如何将“body”的值减少到0,0个字符?

我可以使用子串函数吗?

非常感谢

6 个答案:

答案 0 :(得分:4)

假设body列包含一个字符串,您可以像这样截断它:

var body = (String) reader["body"];
var truncatedBody = body.Substring(0, Math.Min(body.Length, 20));

如果列可以是null,则必须在调用Substring之前检查该列。

如果请求的子字符串长度超过实际字符串的长度,

Substring 将抛出异常。这就是为什么你必须使用字符串长度和所需子字符串长度的最小值。

如果你这么做很多,你可以创建一个扩展方法:

public static class StringExtensions {

  public static String Truncate(this String str, Int32 length) {
    if (length < 0)
      throw new ArgumentOutOfRangeException("length");
    if (str == null)
      return String.Empty;
    return str.Substring(0, Math.Min(str.Length, length));
  }

}

你可以像这样使用它:

((String) reader["body"]).Truncate(20)

答案 1 :(得分:2)

你可以这样做,如下所示。一定要检查DbNull。

while (reader.Read()) 
        {
            string body = reader["body"] is DBNull ? "" : Convert.ToString(reader["body"]);

            if(body.Length > 20)
              body = body .Substring(0, 20);

            newsLabel.Text += "<div style='float:left;'>" + body  + "</div>";   
        }

答案 2 :(得分:1)

是的,你可以在C#

Substring中完成
newsLabel.Text += "<div style='float:left;'>" + Convert.ToString( reader["body"]).SubString(0,20) + "</div>";

阅读MSDN Link

答案 3 :(得分:1)

reader["body"].ToString().Substring(0,20);

答案 4 :(得分:1)

除了这里的所有答案之外,您还可以将此子字符串推回数据库 - 因为SQL具有SubString函数。

e.g。如果您使用的是Linq 2 Sql,那么c#SubString方法可以转换回数据库中的SQL操作 - http://weblogs.asp.net/dixin/archive/2010/04/15/understanding-linq-to-sql-4-data-retrieving-via-query-methods.aspx

这是最佳还是需要取决于您的应用程序和数据库。

希望有所帮助

斯图尔特

答案 5 :(得分:0)

while(reader.Read()) 
{
    string readBody = reader["body"] as string;
    if(!string.IsNullOrEmpty(readBody))
    {
        if(readBody.Length > 20)
           newsLabel.Text = string.Format("{0}<div style='float:left;'>{1}</div>",
                                     newsLabel.Text, readBody.Substring(0,20));
        else
           newsLabel.Text = string.Format("{0}<div style='float:left'>{1}</div>",
                                     newsLabel.Text, readBody);
    }
}