IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.
Модератор: kdv
-
smartyn
- Сообщения: 7
- Зарегистрирован: 12 июл 2006, 18:09
Сообщение
smartyn » 12 июл 2006, 18:22
Возникла проблема с передачей timestamp в хранимую процудуру
Использую Firebird 1.5.3, C# и Firebird NET Data Provider 1.7.
на клиентской машине и на сервер разные региональные настройки.
вызываю храниую процедуру следующим образом
Код: Выделить всё
FbCommand cmd = new FbCommand("select * from get_ipaddress(@time)", lConnection);
cmd.Parameters.Add("@time", FbDbType.TimeStamp).Value = Time;
FbDataReader reader = cmd.ExecuteReader();
Если Time например равен 01.07.2006 00:00:00 то в результате я получаю данные за 7 января 2006 года
а если устанавливаю одинаковые региональные настройки то получаю инфо за 1 июля 2006 года.
Подскажите как можно программно установить необходимый формат даты для работы с хранимыми процедурами
-
Merlin
- Динозавр IB/FB
- Сообщения: 1502
- Зарегистрирован: 27 окт 2004, 11:44
Сообщение
Merlin » 12 июл 2006, 19:45
А що, это бисово, то есть тьфу, Биллино, отродье параметры только строками умеет принимать, прямо TDateTime'ом - не-а?
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 12 июл 2006, 21:55
отож. ненавижу варианты, и никому ими пользоваться явно не советую.
-
smartyn
- Сообщения: 7
- Зарегистрирован: 12 июл 2006, 18:09
Сообщение
smartyn » 13 июл 2006, 11:02
подскажите какие тогда существуют методы предачи параметров в хранимую процедуру применительно к Firebird NET Data Provider 1.7
насколько я понял в Dataprovider-е параметры передаются только как вариант, или есть другие способы?
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 13 июл 2006, 13:18
стандартные методы asString, asInteger и т.п. присутствуют?
-
smartyn
- Сообщения: 7
- Зарегистрирован: 12 июл 2006, 18:09
Сообщение
smartyn » 13 июл 2006, 13:28
Вроде не наблюдаются

в C# такого не замечал
есть Value типа object (что то вроде Variant но несколько умнее)
есть метод AddParameter которому указываю имя параметра и его тип как результат получаю экземпляр класса FbParameter у котороого есть свойство Value вот вроде и все
-
CyberMax
- Заслуженный разработчик
- Сообщения: 638
- Зарегистрирован: 31 янв 2006, 09:05
Сообщение
CyberMax » 13 июл 2006, 13:34
smartyn писал(а):есть Value типа object (что то вроде Variant но несколько умнее)
Ну какой же это Вариант. Это базовый класс, который в Delphi TObject называется...
-
smartyn
- Сообщения: 7
- Зарегистрирован: 12 июл 2006, 18:09
Сообщение
smartyn » 13 июл 2006, 13:41
сорри, конечно Вы правы, это базовый класс для всех классов фреймворка.
Но от этого не становиться легче

-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 13 июл 2006, 14:34
для начала надо определиться, что "региональные настройки" серверу и клиенту до лампочки, и формат преобразования строки в двоичный вид, передаваемый клиенту и серверу, определяется только клиентским приложением.
Например, классический случай - помещение в параметр значения, принимаемого из строки ввода. Строка в дату преобразуется не клиентом и не сервером IB/FB. Она преобразуется используемыми компонентами, в данном случае провайдером .Net. В соответствии с локалью, получаемой приложением при старте.
Даже если бы и был asDateTime, это просто облегчило бы "бесформатную" трансляцию из даты в дату. Но с конвертацией из строки в дату все равно ситуация останется такой, как я ее описал выше.
Если же на сервер дата/время передается как строка, то она должна быть в стандартном формате, понимаемым сервером. dd.mm.yyyy, mm/dd/yyyy или dd-mmm-yyyy.
-
smartyn
- Сообщения: 7
- Зарегистрирован: 12 июл 2006, 18:09
Сообщение
smartyn » 13 июл 2006, 14:47
т.е. если есть такой фрагмент
Код: Выделить всё
DateTime Time=DateTime.Now;
FbCommand cmd = new FbCommand("select * from get_ipaddress(@time)", lConnection);
cmd.Parameters.Add("@time", FbDbType.TimeStamp).Value = Time;
FbDataReader reader = cmd.ExecuteReader();
Net провайдер не будет выполнять преобразований даты и передаст на сервер значение в двоичном виде?
если так то наверно я что то не так установил или настроил

-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 13 июл 2006, 14:50
Net провайдер не будет выполнять преобразований даты и передаст на сервер значение в двоичном виде?
ээээ... я как раз и говорю о том, что при присвоении Value и происходит то самое преобразование, которое приводит к твоей "проблеме". Я понятия не имею, как эти типы хранятся и обрабатываются в C# и .Net.
-
CyberMax
- Заслуженный разработчик
- Сообщения: 638
- Зарегистрирован: 31 янв 2006, 09:05
Сообщение
CyberMax » 13 июл 2006, 15:22
Merlin писал(а):Помойму тут НЕТчиков вообще нет.
Товарищ, вы не правы

. Я Хорошо знаю C# и немного знаю сам .NET (1.1 и 2.0). Просто с базами почти не работал, так бы подсказал чего. Полгода назад делал проект с одной сеткой, проверил, что в сетку заливается таблица через провайдер и все. Глубже не копал.
Оффтоп: 2 smartyn. А у тебя как с отрисовкой форм? Нет мерцания при пролистывания TabControl'а или просто при отображении формы?
-
smartyn
- Сообщения: 7
- Зарегистрирован: 12 июл 2006, 18:09
Сообщение
smartyn » 13 июл 2006, 15:30
тоже офтоп. у меня вообщето service а не GUI приложение, так что мигания при отрисовке не наблюдаю в связи с отсутствием
а те GUI приложения что делал нормально отрисовывались (ну на целероне 677 с 256МБ были тормоза, но то вопрос к железу)