Почему мой oracledatareader извлекает только 1 случайную строку
У меня есть программа, которая извлекает действительные адреса электронной почты из таблицы базы данных Oracle и записывает их в текстовый файл. Когда я запускаю программу, я получаю только 1 случайную строку вместо 300000+ строк. Когда я перехожу через код, я вижу, что возвращаемое значение повторяется во всех возвращенных строках.
Это мой код для извлечения данных :
<pre> List<Flex> details = new List<Flex>(); try { using (OracleConnection connp = new OracleConnection(FCUBSConnection)) { connp.Open(); OracleCommand cmd1 = new OracleCommand("SELECT FCPREPROD.STTM_CUST_PERSONAL.CUSTOMER_NO,FCPREPROD.STTM_CUST_PERSONAL.MOBILE_NUMBER,FCPREPROD.STTM_CUST_PERSONAL.LAST_NAME,FCPREPROD.STTM_CUST_PERSONAL.E_MAIL,FCPREPROD.STTM_CUST_PERSONAL.FIRST_NAME,FCPREPROD.STTM_CUSTOMER.LOCAL_BRANCH FROM FCPREPROD.STTM_CUST_PERSONAL INNER JOIN FCPREPROD.STTM_CUSTOMER ON FCPREPROD.STTM_CUST_PERSONAL.CUSTOMER_NO = FCPREPROD.STTM_CUSTOMER.CUSTOMER_NO", connp); OracleDataReader dr1 = cmd1.ExecuteReader(); while ( dr1.Read()) { var model = new Flex(); model.EmailAddress = Convert.ToString(dr1["E_MAIL"]); model.FirstName = Convert.ToString(dr1["FIRST_NAME"]); model.LastName = Convert.ToString(dr1["LAST_NAME"]); model.MobileNo = Convert.ToString(dr1["MOBILE_NUMBER"]); model.CustNo = Convert.ToString(dr1["CUSTOMER_NO"]); details.Add(model); } connp.Close(); } foreach (var email in details) { if (!string.IsNullOrEmpty(email.EmailAddress) && IsValidEmail(email.EmailAddress)) { //write recipients to logfile string realPath = @"C:\Users\tshumae\Documents\"; string appLog = "SSP_EMAILS"; var logPath = realPath + Convert.ToString(appLog) + DateTime.Today.ToString("dd -MM-yy") + ".txt"; try { if (!File.Exists(logPath)) { File.Create(logPath).Dispose(); using (StreamWriter sw = File.AppendText(logPath)) { sw.WriteLine(email.EmailAddress + " " + email.LastName); sw.Flush(); sw.Close(); } } } catch (UnauthorizedAccessException ex) { } } } } catch (Exception ex) { ExceptionLogger.SendErrorToText(ex); }
Что я упускаю ? Похоже, что существует некоторая трансформация, которая происходит по мере того, как DataReader циклически перебирает записи и добавляет их в подробности
Что я уже пробовал:
Я попытался переместить модель из цикла while как показано ниже но вместо этого я все еще получаю 1 строку :
var model = new Flex(); while ( dr1.Read()) { model.EmailAddress = Convert.ToString(dr1["E_MAIL"]); model.FirstName = Convert.ToString(dr1["FIRST_NAME"]); model.LastName = Convert.ToString(dr1["LAST_NAME"]); model.MobileNo = Convert.ToString(dr1["MOBILE_NUMBER"]); model.CustNo = Convert.ToString(dr1["CUSTOMER_NO"]); details.Add(model); }