2013-07-02 26 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; 
}