即使行存在,ODBCDataReader有时也会返回false

时间:2015-01-05 16:37:45

标签: c#

我的OdbcDataReader.HasRows仅在第一次读取时返回FALSE,但对于所有其他读取返回true。

首先,我将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    

1 个答案:

答案 0 :(得分:1)

我终于解决了这个问题。在创建和使用第一个ODBC阅读器之后,我不得不关闭并处理它。然后创建一个新的ODBC读取器,获取数据,然后关闭并处理(或NULL)该读取器。