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
Этот код будет уязвим для SQL-инъекций. Вы разговариваете с AS400, тем не менее, кто знает, поддерживает ли он даже хорошие параметризованные запросы. –
@Joel, спасибо. Будете ли вы это делать, но из любопытства, как бы вы предложили мне это реализовать? Кроме того, все, что я могу сделать с моей текущей проблемой? Благодарю. – MTH
Наконец-то это исправлено. Мне пришлось создать первый ODBC-ридер, затем удалить его и создать новый считыватель ODBC для чтения из второй базы данных. – MTH