У меня возникает проблема, которая для меня поражает. Я заметил, что IDataReader.Read() действует по-разному в зависимости от того, как установлен IDbCommand.CommandText.Несогласованное поведение с использованием IDataReader.Read()
В приведенном ниже коде - если «AID» установлен и передан в EntAgencyId(), reader.Read() возвращает true, и программа может войти в цикл while. Если я просто установил «запрос» в EntAgencyId() с использованием того же значения, которое я передаю функции («455»), программа никогда не сможет ввести цикл while (такое же поведение происходит при передаче «AID» из textbox.text).
public string EntAgencyId(string AID)
{
cmd = uasConnection.CreateCommand();
//query = "select * from EnterpriseAgencyTbl where AOCId = " + AID; //<--Works
query = "select * from EnterpriseAgencyTbl where AOCId = 455"; //<--Causes issue
cmd.CommandText = query;
reader = cmd.ExecuteReader();
while (reader.Read())
{
EntAgId = reader["Id"].ToString();
AgencyName = reader["Name"].ToString();
}
reader.Close();
return AgencyName;
}
При отладке, «запрос» всегда имеет то же значение, так почему же это делает разницу с .read().
Пища для размышлений - .Read() возвращает true, если есть больше строк; в противном случае - false. В этом случае я попробовал просто прочитать первую одиночную строку с использованием свойства Item и GetValue(), оба из них приводят к ошибке «Объект, не установленный в экземпляр объекта».
У меня полностью закончились идеи, поэтому любая помощь будет оценена!
Я * сильно * подозреваю, что ваши диагностические данные неверны. Одна строка запроса была построена, ничто не заботится о том, как она была построена. (И вы не должны строить запрос, используя значение текстового поля как часть SQL, конечно. Используйте параметризованный SQL вместо этого.) –
Не могли бы вы добавить код, который вызывает 'EntAgencyId'? – phoog
Из любопытства, какой тип столбца AOCId? И передаете ли вы строку «455» (с тиковыми кавычками) в функцию? или "455"? –