这两种方法的主要区别是什么?在msdn网站上,它的解释如下,但我不理解它。
Read将SqlDataReader前进到下一条记录。(覆盖DbDataReader.Read()。)
读取批处理Transact- NextResult语句的结果时,SQL使数据读取器前进到下一个结果。(覆盖dbDataReader.NextResult()。)
发布于 2014-11-21 00:23:56
如果您的语句/过程返回多个结果集,例如,如果您在单个Command对象中有两个select语句,那么您将返回两个结果集。
NextResult用于在结果之间移动sets.Read用于在单个结果集的记录中向前移动。考虑以下示例:
如果你有一个proc,它的主体是:
.... Proc start
SELECT Name,Address FROM Table1
SELECT ID,Department FROM Table2
-- Proc End执行上面的proc将产生两个结果集。一个用于Table1或第一个select语句,另一个用于下一个select语句。
默认情况下,第一个结果集可用于Read。如果您想移动到第二个结果集,您将需要NextResult。
请参阅:Retrieving Data Using a DataReader
来自相同link的示例代码:使用NextResult检索多个结果集
static void RetrieveMultipleResults(SqlConnection connection)
{
using (connection)
{
SqlCommand command = new SqlCommand(
"SELECT CategoryID, CategoryName FROM dbo.Categories;" +
"SELECT EmployeeID, LastName FROM dbo.Employees",
connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
while (reader.HasRows)
{
Console.WriteLine("\t{0}\t{1}", reader.GetName(0),
reader.GetName(1));
while (reader.Read())
{
Console.WriteLine("\t{0}\t{1}", reader.GetInt32(0),
reader.GetString(1));
}
reader.NextResult();
}
}
}发布于 2016-10-30 15:39:35
严格来说,这不是这个问题的答案,但如果您使用DataTable.Load方法而不是Reader.Read方法来使用读取器中的数据,请注意,在完成Load方法之后,读取器现在被放在下一个结果集的开头,因此您不应该调用NextResult方法,否则将跳过下一个结果集。
在这个场景中,只需围绕DataTable.Load调用在Reader.HasRows上执行一个简单的循环就可以处理潜在的多个结果集。
https://stackoverflow.com/questions/27044485
复制相似问题