我是 SQL Server 的新手,如果我的问题看起来微不足道,我很抱歉,但我无法找到一个好的答案或至少一个我可以利用的答案。
我的问题是我需要使用 sql datareader 来获取表 GUID,稍后我将使用这些 GUID 将条目插入另一个数据库。关闭 datareader 会处理其中的所有信息,我无法找到如何返回 datareader 值以便稍后在代码中调用它们。您如何返回或存储数据读取器值以供以后调用?
与其返回数据读取器,不如将所有值添加到集合中。在这里,您需要一个List<T>
或T[]
(数组)。这应该包含对查询结果建模的对象。如果您只返回 Guid,那么它将是List<Guid>
or Guid[]
。
通常,您的所有数据库交互都应该在应用程序的一层中。正是在这一点上,您想要反序列化查询结果。在代码的其他地方,您应该处理本机 C# 类型,而不是仍在等待反序列化的查询结果。在这里,您通常只需要获取形成查询所需的任何数据并返回对查询结果建模的对象或对象集合的方法。
我会怎么做(在数据层中):
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;
}
You could just store it to a DataTable:
SqlDataReader dr = null; // something you already have
DataTable dt = new DataTable();
dt.Load(dr);
Now all the rows and columns should be available in the DataTable until you're done using it.
Note: DataTable lives at: System.Data.DataTable.