varchar (max) + linq to sql - PullRequest
       45

varchar (max) + linq to sql

4 голосов
/ 28 сентября 2010

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

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

Например:

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

UPDATE:

Тип данных сервера: varchar (max). Поле, о котором идет речь, это формула2: alt text

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

Есть предложения?

Ответы [ 2 ]

3 голосов
/ 13 октября 2010

С спасибо до 888 .

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

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

var foo = dc.foos.First();
string formula = new string(foo.Formula2.ToArray());
2 голосов
/ 12 октября 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());
...