2011-07-21 66 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); 
}