简体   繁体   English

重置 OracleDataReader 阅读器并在 C# foreach 循环内调用 SQL

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM