2010-09-28 74 views
4

J'ai une colonne varchar (max) que j'essaie de lire mais le champ est tronqué à 4 000 caractères. J'ai vu similar questions, mais ils sont du côté de sql.varchar (max) + linq to sql

Que dois-je faire pour obtenir le champ entier?

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 setting TextSize mais il n'a pas fait une 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 je tente de changer le type à quelque chose de différent comme objet, je reçois un message « Mapping entre DbType « VARCHAR (MAX) » et type « System.Object » dans la colonne » Formule2 'de Type' t_PriceFormula 'n'est pas supporté. '

Des suggestions?

+0

Comment la colonne est-elle configurée dans DBML? en particulier la propriété 'Server Data Type'? –

+0

Quel est le niveau de compatibilité du serveur de base de données? voir ici - http://msdn.microsoft.com/en-us/library/bb510680.aspx –

Répondre

3

Avec thanks à 888.

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

Convertissez le champ en tableau, puis revenez à une chaîne.

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

N'est-ce pas la réponse de 888? Ne devriez-vous pas les récompenser? –

+1

La suggestion de 888 était de convertir le champ en varbinary (max). J'ai upvoted et utilisé cela pour obtenir ma réponse. –

2

ressemble à .net convertir varchar à nvarchar je ne sais pas comment le résoudre directement. mais System.Text.Encoding pourrait aider essayer cette

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

La conversion du champ en varbinary est extrême. Si la base de données supporte le champ alors il doit y avoir un moyen de le sortir ... –