Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Как преобрзовать объект в строку?


Автор: remal 1.11.2008, 18:05
Вобщем такая ситуация. Беру из базы данных из поля мемо текст (длинна его значительно больше чем 255 символов) 
Код

rdr.Read();
(rdr.GetValue(0));


Мне его нужно поместить в richTextBox (напрямую он естественно не хочет)
Код

richTextBox.Text = (rdr.GetValue(0));


А если преобразовывать в строку, то урезает до 255 символов, что есть совсем не гуд
Код

richTextBox.Text = (rdr.GetValue(0).toString());


И такой вариант тоже урезает
Код

richTextBox.Text = (rdr.GetString(0));


Че делать то, братцы? Как его заставить выдать все содержимое в текстбокс?

Автор: mihryak 1.11.2008, 23:54
а ты уверен, что это не база обрезает при записи? посмотри какими-нибудь вьюерами содержимое таблицы
пс. что за база, кстати?

Автор: archeg 2.11.2008, 01:35
Цитата(mihryak @ 1.11.2008,  23:54)
а ты уверен, что это не база обрезает при записи? посмотри какими-нибудь вьюерами содержимое таблицы
пс. что за база, кстати?

Access. Автор уже в другом топике спрашивал. Я не особо работал с ексесом, там Memo случаем не CLOB?

Автор: remal 5.11.2008, 09:23
База dbf, в самой базе ниче не обрезается, смотрел вьювером.

Автор: MasterOfCode 5.11.2008, 09:38
Может дело в Текстбоксе, поставте текстбоксу свойство Мультилайн в тру. Или попробуйте вывести в другой контрол. Или сохраните в файл. И тогда определите кто именно шкодит, датаридер, текст бокс или БД. smile

Автор: remal 5.11.2008, 12:34
Не, дело именно в преобразовании в строку (ToString), как я понял, потому что я уже проверил во всех возможных контролах, и к тому же вывод даже из поля типа Character все-равно обрезается, даже не знаю как с этой бедой справиться.

Автор: MasterOfCode 5.11.2008, 12:40
К чему такая уверенность, вы проверяли в дебаге что возвращает эта строка:
Код

rdr.GetValue(0);

Автор: archeg 5.11.2008, 14:33
Код и базу в студию

Автор: Dims 5.11.2008, 14:43
Мысли вслух.

База данных, как правило, как раз и имеет ограничение в 255 символов на строку. Если символов больше, то поле должно быть полем Мемо, оно может содержать сколько угодно символов, причём первые 255 будут храниться прямо в записи, а остальные -- в отдельном ресурсе. 

Поскольку поле Мемо может содержать гигабайты данных, то и читать его, наверное, надо не через преобразование в строку, а через создание отдельного потока. То есть, я бы поискал соответствующие для этого методы.

Вероятно, когда Вы делаете ToString, система полагает, что Вам нужна именно строка, то есть, НЕ МЕМО. И потому обрезает.

Автор: remal 5.11.2008, 15:03
Вот код, тут правда консольная версия, но сути дела это не меняет, даже в консоли режет беспощадно

Код

/*
 * Created by SharpDevelop.
 * User: Верстка
 * Date: 05.11.2008
 * Time: 10:15
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;

namespace cons1
{
    class Program
    {
        public static void Main(string[] args)
        {
            // TODO: Implement Functionality Here
            
            OleDbConnection cnn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\dbf\\;Extended Properties=dBASE IV;User ID=Admin;Password=");
           //OleDbConnection cnn = new OleDbConnection();
           //cnn.ConnectionString = strCnn;
           cnn.Open();
            
           
          OleDbCommand cmd = new OleDbCommand();
           cmd.Connection = cnn;
      
           string strCmd = "SELECT DISTINCT OLE FROM data WHERE NAME LIKE '%123%'";
           cmd.CommandText = strCmd;
           cmd.CommandType = CommandType.Text;

           OleDbDataReader rdr = cmd.ExecuteReader();
        
           rdr.Read();
        
         Console.Write(rdr.GetValue(0));
         
        
           rdr.Close();
           cnn.Close();
           Console.ReadKey();
        }
    }
}


База в приаттаченом файле

Вопрос к Dims, а вы что-нибудь подобное проделывали? Если возможно код для примера? Спасибо.

Автор: Dims 5.11.2008, 18:26
Сейчас нет времени искать решение. Помню, что с таким сталкивался, совсем в другой задаче и на другом языке. И вспоминаю свои мысли на этот счёт.

Если конкретнее, то сейчас посмотрел хелп и думаю, что надо попробовать использовать метод GetData, а не GetValue.

Автор: remal 6.11.2008, 15:11
Всем спасибо, решение оказалось проще чем мы все предполагали, вот при такой конструкции выдает все замечательно

Код

(string)rdr["Имя поля"];

Автор: Bogdan1024 6.11.2008, 16:57
remal, интереса ради, скажи пожалуйста что возвращает эта функция:
Код

rdr["Имя поля"].GetType().FullName

и
Код

rdr.GetValue(0).GetType().FullName

Бо мне почему-то кажется что это одни и те же классы.
Нэ панимаю.

Автор: remal 7.11.2008, 15:22
как ни странно оба возвращают System.String

сам не пойму в чем тут фишка, на решение чисто случайно наткнулся, когда уже отчаялся и решил писать для мускула  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)