【发布时间】:2021-02-09 09:19:37
【问题描述】:
我想要做的是使用 ado.net 调用存储过程并获取其结果。我试图在 ssms 中执行存储的过程并且它工作正常。
但是当我尝试通过代码运行它时,结果为空,所以我尝试调试,这是我的问题。
下面是我正在尝试调试的代码。
using (SqlConnection sql = new SqlConnection(_connString))
{
using (SqlCommand cmd = new SqlCommand("GetDdmhData", sql))
{
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@requestDate", dateReport.Value.Date.ToString("yyyy-MM-dd")));
await sql.OpenAsync();
using (var reader = await cmd.ExecuteReaderAsync())
{
while (await reader.ReadAsync())
{
var test = "";
}
}
}
}
我有点奇怪的问题。我在下面的语句中放置了断点
while (await reader.ReadAsync())
一旦我的断点被命中,我对“reader”值进行了快速观察,它返回了一些行。
然后我关闭 QuickWatch 窗口,然后立即在“阅读器”上重新打开 Quickwatch 窗口,突然,结果为空。
有人可以向我解释为什么会发生这种情况以及如何解决这个问题吗?
【问题讨论】:
-
向我们展示快速观看窗口的屏幕截图。我的猜测是快速手表无意中移动到下一行数据。
-
@mjwills 我已将图片添加到上面的问题中
-
注意“值”列的状态。 “扩展结果视图将枚举...”看起来您已经枚举并耗尽了阅读器并且它不会自行重置
-
另外,我刚刚验证了 SqlDataReader 和 DbDataReader 都没有调试器代理(这是有道理的,但我想确定一下),所以当你扩展它时枚举“真实”的东西
-
是的 - 所以简短的回答是“不要在快速观察窗口中展开这些结果”。
标签: c# .net ado.net executereader