2013-07-02 29 views
0

我是SQL Server的新手,非常抱歉,如果我的問題看起來微不足道,但我一直無法找到一個好的答案或至少一個我可以利用。如何返回SQL DataReader數據

我的問題是,我需要使用sql datareader來獲取表GUID,我將稍後使用它來將條目插入到另一個數據庫中。關閉datareader處理其中的所有信息,我一直無法找到如何返回datareader值,以便我可以稍後在我的代碼中調用它們。如何返回或存儲稍後調用的數據讀取器值?

+0

你必須保持讀者開放,而使用數據,否則你需要將它關閉之前再存放在一個臨時位置(它)。你也可以使用數據表。 –

+2

創建一個列表並添加Guids並返回它,它將更容易與 – Jonesopolis

+0

一起工作請將您的代碼 – ElmoVanKielmo

回答

3

而不是返回數據讀取器將所有值添加到集合。在這裏你需要一個List<T>T[](數組)。這應該包含模擬查詢結果的對象。如果您只返回Guids,那麼它將是List<Guid>Guid[]

一般來說,所有的數據庫交互應該在應用程序的一層。在這一點上,你想反序列化查詢結果。在代碼中的其他地方,您應該處理本機C#類型,而不是處於待處理反序列化狀態的查詢結果。在這裏,您通常只需要採用任何必要的數據來形成查詢並返回建模查詢結果的對象或對象集合的方法。

+0

感謝您的快速幫助。我最終使用ebyrob的建議,但你的建議更一般,應該幫助其他讀者。 –

0

你可以只將其存儲到數據表:

SqlDataReader dr = null; // something you already have 
DataTable dt = new DataTable(); 
dt.Load(dr); 

現在所有的行和列,應在DataTable中使用,直到你用它做。

注意:DataTable位於:System.Data.DataTable。

+0

感謝這個人爲我做出了最好的選擇,它幫助我繞過了其他選項所需的大量工作。雖然我認爲使用更一般的List <>選項將適用於更多的用戶。 –

+0

@JuanPortela有趣的是,您注意到這很有用,但認爲「更一般」的POCO解決方案可以爲其他人服務。這三行代碼幾乎適用於每個帶查詢結果集的SQL查詢。解析並將結果存儲到(可能是用戶對象)列表中需要每個查詢的自定義代碼(更不用說創建存儲類型) – 2013-07-08 14:45:54

0

我會怎麼做(在數據層):

public List<Guid> GetAllIds() 
{ 
    var cmd = new SqlCommand(yourConnectionString, "SELECT yourIDColumn from YourTable") 

    var ids = new List<GUID>(); 
    Using(var reader = cmd.ExecuteReader()) 
    { 
     while (reader.Read()) 
     { 
     ids.Add(reader.GetGuid(0)) 
     } 
    } 
    return ids; 
}