2011-07-21 72 views
2

如何从C#中的SQL Server数据库中检索一列数据类型Varchar(MAX)检索VARCHAR(MAX)

我不认为SqlDataReader有助于检索它。

任何线索?

感谢

+1

那你试试? – VMAtm

+0

我试着使用SqlDataReader reader = command.ExecuteReader()来检索它。但是我读到它需要使用Streams/Pointers/Something进行检索,而传统方法不起作用 – Jayesh

+0

您的查询是什么? –

回答

3

这只是一个串场....只是抓住它像任何其他字符串.....

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

确实没有什么特别之处VARCHAR(MAX)型 - 它只是一个文本字段,它可以容纳高达2 GB的文本 - 就像.NET string一样。你不需要做任何特别的事情,比如流媒体或任何其他的东西 - 只要将列读入字符串!

+0

虽然如果结果是500MB,您可能会选择*通过流API读取它 –

+0

@Marc Gravell:是的,当然 - 但是您真正拥有500MB数据的VARCHAR(MAX)列的数量是多少? –

+1

我认为.NET字符串的大小可能低于[2 GB]的实际限制(http://stackoverflow.com/questions/140468/what-is-the-maximum-possible-length-of -a净字符串)。 –

0

Working with Large-Value Types in ADO.NET

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

或者只是把它转换为CLR类型:

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