2015-01-05 4 views
0

My OdbcDataReader.HasRows возвращает FALSE только при первом чтении, но возвращает true для всех остальных чтений.ODBCDataReader иногда возвращает false, даже когда существуют строки

Сначала я настраиваю 2 считывателя ODBC на одно соединение с базой данных. Если я получу необходимую информацию с первого раза, я перейду к второму читателю и возьму дополнительную информацию.

OdbcConnection MACMIRROR = new OdbcConnection("DSN=AS400 - Mac-Mirror"); 
MACMIRROR.Open(); // This line opens MacMirror database 

OdbcCommand MMCmd_ConfigCode_SerialNum_PartNum = MACMIRROR.CreateCommand(); 
// Get Configuration Code, Serial number and Part number command. 

OdbcCommand MMCmd_TextualInfo = MACMIRROR.CreateCommand(); 
// Get Textural information out of MACPAC for specified serial number. 

MMCmd_ConfigCode_SerialNum_PartNum.CommandText = "SELECT GSMCFG, GSMSER, GSMPRT FROM GST001PF 
WHERE GSMSER='" + Dispenser_SN.Golden_Dispenser_Serial_Number + "'"; 


MMCmd_TextualInfo.CommandText = "SELECT CXCFGC, CXEXCC FROM EC140M2 WHERE CXCFGC='" + 
This_Dispenser.CompleteDispConfigCode + "'"; 

OdbcDataReader DBReader = MMCmd_ConfigCode_SerialNum_PartNum.ExecuteReader(); 
OdbcDataReader DBReaderTextInfo = MMCmd_TextualInfo.ExecuteReader(); 

// Use serial number to get config code. 
    if (DBReader.Read()) 
     { 
      This_Dispenser.CompleteDispConfigCode = (DBReader["GSMCFG"].ToString()); 
      This_Dispenser.SetAllParametersFromConfigCode(); 
       //Got good config code, now use config code to get textual information. 

      if (DBReaderTextInfo.Read()) 
       // Does not read on the first attempt only 
       // (had rows is false here, but true on 2nd time through code) 
       { 
        This_Dispenser.TexturalInformation = (DBReaderTextInfo["CXEXCC"].ToString()); 
        DBReaderTextInfo.Close(); 
       } 
     } 

DBReader.Close(); 
MACMIRROR.Close(); // Close the MacMirror connection  
+0

Этот код будет уязвим для SQL-инъекций. Вы разговариваете с AS400, тем не менее, кто знает, поддерживает ли он даже хорошие параметризованные запросы. –

+0

@Joel, спасибо. Будете ли вы это делать, но из любопытства, как бы вы предложили мне это реализовать? Кроме того, все, что я могу сделать с моей текущей проблемой? Благодарю. – MTH

+0

Наконец-то это исправлено. Мне пришлось создать первый ODBC-ридер, затем удалить его и создать новый считыватель ODBC для чтения из второй базы данных. – MTH

ответ

1

Я, наконец, получил это исправление. После создания и использования первого ODBC-считывателя мне пришлось закрыть его и утилизировать. Затем создайте новый ODBC-ридер, возьмите данные, затем закройте и удалите (или NULL) этот читатель.

Смежные вопросы