【问题标题】:Substring value retrieved from database in .NET / C#从 .NET / C# 中的数据库检索的子字符串值
【发布时间】:2011-08-26 06:52:56
【问题描述】:

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

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

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

有没有我可以使用的 Substring 函数?

非常感谢

【问题讨论】:

    标签: c# .net database while-loop


    【解决方案1】:

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

    【讨论】:

    • 非常感谢,Martin :) 我已经得到了很多方法来做到这一点。再次感谢您如此迅速的回复。
    【解决方案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>";   
            }
    

    【讨论】:

    • 如果正文少于 20 个字符,这将引发异常。
    【解决方案3】:
    reader["body"].ToString().Substring(0,20);
    

    【讨论】:

    • 非常感谢。多么好的选择:)我在上面试过 Amitabh,效果很好。谢谢
    • 如果正文少于 20 个字符,这将引发异常。
    【解决方案4】:

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

    例如如果您使用的是 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】:

      是的,您可以在 C# 中的 Substring 中执行此操作

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

      阅读MSDN Link

      【讨论】:

      • (1) reader["Body"] 是对象类型,(2) 方法名为Substring
      • 如果正文少于 20 个字符,这将引发异常。
      【解决方案6】:
      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);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-22
        • 2023-03-31
        • 2017-10-10
        • 1970-01-01
        • 2012-02-13
        • 1970-01-01
        相关资源
        最近更新 更多