[英]Resetting OracleDataReader reader and calling SQL inside C# foreach loop
How can I reset a dataReader inside a foreach loop?如何在 foreach 循环中重置 dataReader? I am trying to run a select query inside a loop but reader is always having the records from the first select.
我正在尝试在循环内运行 select 查询,但阅读器始终拥有来自第一个 select 的记录。 I tried reader.Dispose() and reader.Close() methods but still the value is not resetting to contain the next set of data.
我尝试了 reader.Dispose() 和 reader.Close() 方法,但该值仍未重置以包含下一组数据。 here is my code sample:
这是我的代码示例:
using (OracleCommand cmd = con.CreateCommand())
{
if (getqMidLid != null)
{
foreach (var item in getqMidLid)
{
cmd.BindByName = true;
cmd.InitialLONGFetchSize = -1;
try
{
cmd.CommandText = "select Question_mid, " +
" question_lid," +
" max_score," +
" actual_score," +
" topic," +
" answer_full" +
" from QnA where Question_mid = :mid and Question_lid = :lid" +
" and (max_score = actual_score)";
OracleParameter mid = new OracleParameter("mid", item.QMID);
OracleParameter lid = new OracleParameter("lid", item.QLID);
cmd.Parameters.Add(mid);
cmd.Parameters.Add(lid);
using (OracleDataReader reader = cmd.ExecuteReader())
{
if (reader.HasRows)
{
while (reader.Read())
{
qna.Add(new QuestionAnswer
{
QMID = reader.GetInt32(0),
QLID = reader.GetInt32(1),
MaxScore = reader.GetInt16(2),
ActualScore = reader.GetInt16(3),
Topic = reader.GetString(4),
AnswerFull = reader.GetString(5)
});
}
}
}
}
catch (Exception sql)
{
Console.WriteLine(sql.Message);
throw;
}
}
}
}
Solved it by moving the OracleCommand object inside the result loop.通过在结果循环中移动 OracleCommand object 来解决它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.