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

本文关键字:检索 字符串 数据库 NET | 更新日期: 2023-09-27 17:56:37

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

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

我纳闷。如何将"body"的值减少到仅 0,20 个字符?

是否有我可以使用的子字符串函数?

非常感谢

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

假设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)

您可以按如下所示进行操作。确保检查 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>";   
        }
reader["body"].ToString().Substring(0,20);

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

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

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

希望有帮助

斯图尔特

是的,你可以在 C# 中用Substring来做到这一点

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

读取 MSDN 链接

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);
    }
}