4 votes

Varchar(max) + linq to sql

J'ai une colonne varchar(max) que j'essaie de lire mais le champ est tronqué à 4 000 caractères. J'ai vu des questions similaires, mais elles concernent le côté sql.

Que dois-je faire pour obtenir l'intégralité du champ?

Par exemple:

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

J'ai essayé des choses comme définir TextSize mais ça n'a pas fait de différence.:

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

MISE À JOUR:

Le type de données du serveur est varchar(max). Le champ en question est formula2: alt text

Si j'essaie de changer le type en quelque chose de différent comme Object, je reçois le message 'La correspondance entre DbType 'VarChar(MAX)' et Type 'System.Object' dans la colonne 'Formula2' du Type 't_PriceFormule' n'est pas prise en charge.'

Des suggestions?

3voto

Christian Payne Points 3526

Avec merci à 888.

Cela semble un peu compliqué mais cela a fonctionné.

Convertir le champ en un tableau, puis le reconvertir en une chaîne de caractères.

var foo = dc.foos.First();
string formula = new string(foo.Formula2.ToArray());

2voto

Bonshington Points 2111

Çà ressemble à .net convertir varchar en nvarchar je ne sais pas comment le résoudre directement. mais System.Text.Encoding pourrait aider essaye ceci

//1 définir la colonne dans la base de données en varbinary(max)

//2 et quand vous voulez enregistrer dans la base de données
string formule = "...";
System.Data.Linq.Binary bin = new System.Data.Linq.Binary(System.Text.Encoding.ASCII.GetBytes());

//3 quand vous récupérez
    Binary bin = row.Formula2;
    string formule = System.Text.Encoding.ASCII.GetString(bin.ToArray());

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X