Столкнулся с такой проблемой. Перевел программу с IBProvider 2.0 на "FirebirdClient - .NET 3.5, 7-Zip archive".
Возникло пару проблем:
1. Не сильно критичная, но содержимое класса FBConnection свойств DataBase и DataSource поменялось местами относительно OleDBConnection;
2. А вот это вполне критично, используется в коде программы повсеместно, и появились глюки приложения из-за этого: Свойство HasRows класса FBDataReader содержит значение True, даже если в результате запроса ничего не выдалось. При попытке прочитать значение FBDataReader.Read() выдается значение false, на основании чего могу судить, что записей в DBDataReader не было.
Ошибочная информация содержится в FBDataReader.HasRows
-
- Сообщения: 15
- Зарегистрирован: 10 сен 2012, 11:51
-
- Сообщения: 15
- Зарегистрирован: 10 сен 2012, 11:51
Re: Ошибочная информация содержится в FBDataReader.HasRows
т.е., как я понял ошибка известна с 2010 года, и как-то не торопятся ее исправлять? =( печально... придется в коде программы везде прописывать reader.read() для получения достоверного ответа.dimitr писал(а):http://tracker.firebirdsql.org/browse/DNET-305
Re: Ошибочная информация содержится в FBDataReader.HasRows
см. комментарий автора драйвера:как я понял ошибка известна с 2010 года, и как-то не торопятся ее исправлять?
Firebird protocol has no support for this. Until you actually ask for some data. Hence the property returns true for all selects.
-
- Сообщения: 15
- Зарегистрирован: 10 сен 2012, 11:51
Re: Ошибочная информация содержится в FBDataReader.HasRows
Так почему же не поддерживается?.. ранее работал через провайдер и подключение через тот же OleDBConnection и все прекрасно работало... не поддерживается потому, что он не реализовал поддержку?.. Наверное именно так читать правильно будет...kdv писал(а):см. комментарий автора драйвера:как я понял ошибка известна с 2010 года, и как-то не торопятся ее исправлять?
Firebird protocol has no support for this. Until you actually ask for some data. Hence the property returns true for all selects.
В общем ответ понял. Придется считывать строку и дополнительно проверять. Не удобно, но видима придется именно так жить.
Re: Ошибочная информация содержится в FBDataReader.HasRows
OLEDB-провайдер, видимо, при открытии датасета втихаря зачитывал в него некоторое количество строк, и при отсутствии таковых мог вернуть false в подобном методе. NET-провайдер, видимо, без спросу записи на клиента не тянет, поэтому понятия не имеет есть в курсоре данные или нет. И тут безопаснее сказать, что таковые есть. Особенность реализации, не более.