Страница 1 из 1
Как правильно передать timestamp в хранимую процедуру
Добавлено: 12 июл 2006, 18:22
smartyn
Возникла проблема с передачей 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 года.
Подскажите как можно программно установить необходимый формат даты для работы с хранимыми процедурами
Добавлено: 12 июл 2006, 19:45
Merlin
А що, это бисово, то есть тьфу, Биллино, отродье параметры только строками умеет принимать, прямо TDateTime'ом - не-а?
Добавлено: 12 июл 2006, 21:55
kdv
отож. ненавижу варианты, и никому ими пользоваться явно не советую.
Добавлено: 13 июл 2006, 11:02
smartyn
подскажите какие тогда существуют методы предачи параметров в хранимую процедуру применительно к Firebird NET Data Provider 1.7
насколько я понял в Dataprovider-е параметры передаются только как вариант, или есть другие способы?
Добавлено: 13 июл 2006, 13:18
kdv
стандартные методы asString, asInteger и т.п. присутствуют?
Добавлено: 13 июл 2006, 13:28
smartyn
Вроде не наблюдаются

в C# такого не замечал
есть Value типа object (что то вроде Variant но несколько умнее)
есть метод AddParameter которому указываю имя параметра и его тип как результат получаю экземпляр класса FbParameter у котороого есть свойство Value вот вроде и все
Добавлено: 13 июл 2006, 13:34
CyberMax
smartyn писал(а):есть Value типа object (что то вроде Variant но несколько умнее)
Ну какой же это Вариант. Это базовый класс, который в Delphi TObject называется...
Добавлено: 13 июл 2006, 13:41
smartyn
сорри, конечно Вы правы, это базовый класс для всех классов фреймворка.
Но от этого не становиться легче

Добавлено: 13 июл 2006, 14:34
kdv
для начала надо определиться, что "региональные настройки" серверу и клиенту до лампочки, и формат преобразования строки в двоичный вид, передаваемый клиенту и серверу, определяется только клиентским приложением.
Например, классический случай - помещение в параметр значения, принимаемого из строки ввода. Строка в дату преобразуется не клиентом и не сервером IB/FB. Она преобразуется используемыми компонентами, в данном случае провайдером .Net. В соответствии с локалью, получаемой приложением при старте.
Даже если бы и был asDateTime, это просто облегчило бы "бесформатную" трансляцию из даты в дату. Но с конвертацией из строки в дату все равно ситуация останется такой, как я ее описал выше.
Если же на сервер дата/время передается как строка, то она должна быть в стандартном формате, понимаемым сервером. dd.mm.yyyy, mm/dd/yyyy или dd-mmm-yyyy.
Добавлено: 13 июл 2006, 14:47
smartyn
т.е. если есть такой фрагмент
Код: Выделить всё
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 провайдер не будет выполнять преобразований даты и передаст на сервер значение в двоичном виде?
если так то наверно я что то не так установил или настроил

Добавлено: 13 июл 2006, 14:50
kdv
Net провайдер не будет выполнять преобразований даты и передаст на сервер значение в двоичном виде?
ээээ... я как раз и говорю о том, что при присвоении Value и происходит то самое преобразование, которое приводит к твоей "проблеме". Я понятия не имею, как эти типы хранятся и обрабатываются в C# и .Net.
Добавлено: 13 июл 2006, 14:54
Merlin
Помойму тут НЕТчиков вообще нет. Пожалуй в данном конкретном случае кросс-пост на
http://www.sql.ru/forum/actualtopics.aspx?bid=2 будет уместным, там они вроде встречаются.
Добавлено: 13 июл 2006, 14:57
smartyn
спасибо за помощь
Добавлено: 13 июл 2006, 15:22
CyberMax
Merlin писал(а):Помойму тут НЕТчиков вообще нет.
Товарищ, вы не правы

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