varchar (макс.) + linq для sql

У меня есть столбец varchar(max), который я пытаюсь прочитать, но поле усекается до 4000 символов. Я видел похожие вопросы, но они на стороне sql.

Что мне нужно сделать, чтобы получить все поле?

Eg:

using (DataContext dc = new DataContext())
{
    var foo = dc.foos.First();
    if (foo.Formula2.Length > 4000)
    {
        Console.WriteLine("success!");
    }
}

Я пробовал такие вещи, как настройка TextSize, но это не помогло разница.:

dc.ExecuteCommand("SET TEXTSIZE 100000;");
var foo = dc.foos.First();

ОБНОВЛЕНИЕ:

Тип данных сервера — varchar(max). Рассматриваемое поле — формула2: alt text

Если я попытаюсь изменить тип на другой, например Object, я получу сообщение «Сопоставление между DbType «VarChar(MAX)» и типом «System.Object» в столбце «Formula2» типа «t_PriceFormula» не поддерживается. '

Какие-либо предложения?


person Christian Payne    schedule 28.09.2010    source источник
comment
Как настроен столбец в DBML? в частности свойство Server Data Type?   -  person Marc Gravell    schedule 28.09.2010
comment
Каков уровень совместимости сервера базы данных? см. здесь - msdn.microsoft.com/en-us/library/bb510680.aspx   -  person Antony Scott    schedule 30.09.2010


Ответы (2)


С спасибо 888.

Это кажется немного запутанным, но это сработало.

Преобразуйте поле в массив, а затем обратно в строку.

var foo = dc.foos.First();
string formula = new string(foo.Formula2.ToArray());
person Christian Payne    schedule 13.10.2010
comment
Разве это не ответ 888? Разве ты не должен наградить их? - person Merlyn Morgan-Graham; 13.10.2010
comment
888 предложил преобразовать поле в varbinary(max). Я проголосовал и использовал это, чтобы получить свой ответ. - person Christian Payne; 13.10.2010

звучит так, как будто .net конвертирует varchar в nvarchar, я не знаю, как это решить напрямую. но System.Text.Encoding может помочь попробовать это

//1 set col in db to varbinary(max)

//2 and when u want to save to db
string formula = "...";
System.Data.Linq.Binary bin = new System.Data.Linq.Binary(System.Text.Encoding.ASCII.GetBytes());

//3 when u pull ou
    Binary bin = row.Formula2;
    string formula = System.Text.Encoding.ASCII.GetString(bin.ToArray());
person Bonshington    schedule 12.10.2010
comment
Преобразование поля в varbinary является экстремальным. Если база данных поддерживает это поле, то должен быть способ его получить... - person Christian Payne; 13.10.2010