2011-07-21 4 views
2

Comment puis-je récupérer une colonne de type de données Varchar(MAX) à partir d'une base de données SQL Server en C#? Je ne pense pas SqlDataReader aide à le récupérer.Récupération de VARCHAR (MAX)

Une idée?

Merci

+1

Qu'avez-vous essayé? – VMAtm

+0

J'ai essayé de le récupérer en utilisant SqlDataReader reader = command.ExecuteReader(); Mais je l'ai lu qu'il doit être récupéré en utilisant Streams/Pointers/Something et l'approche traditionnelle ne fonctionne pas – Jayesh

+0

Quelle est votre requête? –

Répondre

3

Il est juste un champ de chaîne .... saisir tout comme toute autre chaîne .....

// define your query 
string query = "SELECT YourField FROM dbo.YourTable WHERE ID = 1"; 

using(SqlConnection conn = new SqlConnection("......")) 
using(SqlCommand cmd = new SqlCommand(query, conn)) 
{ 
    conn.Open(); 

    using(SqlDataReader rdr = cmd.ExecuteReader()) 
    { 
     if(rdr.Read()) 
     { 
      string fieldValue = rdr.GetString(0); 
     } 
    } 

    conn.Close(); 
} 

sur le type VARCHAR(MAX) Il n'y a vraiment rien de spécial - il est juste un texte champ, et il peut contenir jusqu'à 2 Go de texte - tout comme un .NET string. Vous n'avez pas besoin de faire quelque chose de spécial, comme le streaming ou quoi que ce soit - il suffit de lire la colonne dans une chaîne!

+0

Bien que, s'il s'avère être 500 Mo, vous pouvez * choisir * de le lire via l'API de streaming –

+0

@Marc Gravell: oui, bien sûr - mais combien de colonnes VARCHAR (MAX) avez-vous réellement qui contiennent 500 Mo de données? –

+1

Je pense qu'il existe une limite pratique sur la taille d'une chaîne .NET inférieure à [2 Go] (http://stackoverflow.com/questions/140468/what-is-the-maximum-possible-length-of -a-net-string). –

0

Working with Large-Value Types in ADO.NET

reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); 
while (reader.Read()) 
{ 
    SqlChars buffer = reader.GetSqlChars(0); 
} 

Ou tout simplement le convertir en type CLR:

while (reader.Read()) 
{ 
    string str = reader[0].ToString(); 
    Console.WriteLine(str); 
} 
Questions connexes