2011-05-16 4 views
3

Я использую следующие зачитать значения из моей базы данных:значение подстроки извлекаются из базы данных в .NET/C#

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

мне было интересно. Как уменьшить значение «body» до 0,20 символов?

Есть ли подстрочная функция, которую я могу использовать?

Большое спасибо

ответ

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>"; 
     } 
+0

Абсолютно блестящий !!! Работал в первый раз. Большое спасибо – michaelmcgurk

+0

Это вызовет исключение, если тело короче 20 символов. –

1

да, вы можете сделать это в Substring в C#

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

чтения MSDN Link

+0

(1) читатель [«Тело»] относится к типу объекта и (2) метод называется «Подстрока». –

+0

Это вызовет исключение, если тело короче 20 символов. –

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

Большое спасибо. Какой выбор выбрать :) Я попробовал Amitabh выше, и он отлично поработал. Спасибо – michaelmcgurk

+0

Это вызовет исключение, если тело короче 20 символов. –

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) 
+0

Огромное спасибо, Мартин :) Мне дали множество способов сделать это. Еще раз спасибо за такой быстрый ответ. – michaelmcgurk

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

Правильно - после моего редактирования это должно быть правильно – Gambrinus

1

В дополнение ко всем ответам здесь, вы может также подтолкнуть эту подстроку к базе данных, поскольку 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

Независимо от того, является ли это оптимальным или требуется, зависит от вашего приложения и базы данных.

Надежда, что помогает

Стюарт

Смежные вопросы