Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Проблема с GETDATE()  [new]
Олег13
Member

Откуда:
Сообщений: 9
Всем доброго времени суток. Посоветуйте что можно сделать? Проблема с функцией GETDATE(). Периодически не верно возвращает дату. Например, вчера вместо 08.04.2015, я получал дату 08.08.2015, при этом данная проблема наблюдается когда GETDATE вызываю из своей программы (пишу на C#), когда выполняю ее напрямую в SQL Management Studio, проблем не наблюдал. Может кто сталкивался с этим. Заранее спасибо.
9 апр 15, 06:09    [17491646]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с GETDATE()  [new]
Добрый Э - Эх
Guest
Олег13,

ошибка в 17 строке, правильный ответ 42. естественно, не в функции GETDATE(), а в твоей программе.
9 апр 15, 06:15    [17491649]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с GETDATE()  [new]
Олег13
Member

Откуда:
Сообщений: 9
Что за бред ты написал?! У меня ошибки в программе нет! Это 1000%! Если бы была ошибка, то она бы появлялась всегда, а у меня как раз это происходит периодически.
9 апр 15, 11:47    [17492853]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с GETDATE()  [new]
совет
Guest
Олег13
Посоветуйте что можно сделать?


Выкинуть C# в утиль и писать в SQL Managment Studio?
9 апр 15, 11:49    [17492865]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с GETDATE()  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
Олег13
Всем доброго времени суток. Посоветуйте что можно сделать? Проблема с функцией GETDATE(). Периодически не верно возвращает дату. Например, вчера вместо 08.04.2015, я получал дату 08.08.2015, при этом данная проблема наблюдается когда GETDATE вызываю из своей программы (пишу на C#), когда выполняю ее напрямую в SQL Management Studio, проблем не наблюдал. Может кто сталкивался с этим. Заранее спасибо.


ну показывай свой код на C# как ты там вызывал GETDATE() с сервера SQL?
9 апр 15, 11:49    [17492866]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с GETDATE()  [new]
o-o
Guest
тогда это происки врагов.
ведь сервер и его getdate() возвращают правильную дату:
Олег13
когда выполняю ее напрямую в SQL Management Studio, проблем не наблюдал.

но!
атаке подвержена лишь ваша программа.
Management Studio злоумышленникам не по зубам, а вот между вашей программой и сервером
специальная программа по компроментированию честных разработчиков
перехватывает ответ сервера и подменяет его на свое значение.
ищите!
9 апр 15, 11:52    [17492876]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с GETDATE()  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Konst_One
Олег13
Всем доброго времени суток. Посоветуйте что можно сделать? Проблема с функцией GETDATE(). Периодически не верно возвращает дату. Например, вчера вместо 08.04.2015, я получал дату 08.08.2015, при этом данная проблема наблюдается когда GETDATE вызываю из своей программы (пишу на C#), когда выполняю ее напрямую в SQL Management Studio, проблем не наблюдал. Может кто сталкивался с этим. Заранее спасибо.


ну показывай свой код на C# как ты там вызывал GETDATE() с сервера SQL?


у него "ошибки в программе нет! Это 1000%! ", какой смысл показывать?
9 апр 15, 12:21    [17493059]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с GETDATE()  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Олег13
Всем доброго времени суток. Посоветуйте что можно сделать? Проблема с функцией GETDATE(). Периодически не верно возвращает дату. Например, вчера вместо 08.04.2015, я получал дату 08.08.2015, при этом данная проблема наблюдается когда GETDATE вызываю из своей программы (пишу на C#), когда выполняю ее напрямую в SQL Management Studio, проблем не наблюдал. Может кто сталкивался с этим. Заранее спасибо.


можно в c# приложении брать текущую дату, затем сравнивать с полученной от sql server,
и если текущая дата меньше, чем полученная, тогда использовать локальную(!)
И MessageBox выдавать юзеру, мол, возможно SQL Server инфицирован трояном.
Соответственно, мониторить постоянно файлы базы антивирусом Касперского(это важно)
9 апр 15, 12:25    [17493081]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с GETDATE()  [new]
Олег13
Member

Откуда:
Сообщений: 9
Вот функция по вставке данных из C#


SqlCommand cm9 = conn.CreateCommand();
cm9.CommandText = "BEGIN TRANSACTION " +
"insert into ZADANIE_PLAT (USER_ID,PAYER,BRANCH,ISPOLNITEL,PLAN_DATE_PAYMENT,SUMM,NDS,NAZNACHEN_PLATEJ,OBOSNOVANIE,POLUCHAT_PLATEJ,INN_POLUCHATEL,KPP_POLUCHATEL,ACCOUNT_POLUCHATEL,BANK_NAIMENOVAN,BIK_BANK_POLUCHATEL,KOR_ACCOUNT_POLUCHATEL,ARTICLE_BUDGET,DEPARTMENT_ZAYAVITEL,BOSS_DEPARTMENT,OTVETSTVENN_PFM_CFO,GL_BUH,BOSS_RESURS_OBESPECHEN,KAZNACHEYSTVO,BOSS_KAZNACHEYSTVO,DATETIME_CREATE,PERIOD,STATUS,NOTES, SROK_OPLAT, PAY_STATUS) values ('" + Form1.val + "', '" + textBox1.Text + "', '" + comboBox1.Text + "', '" + textBox2.Text + "', convert(datetime,'" + dateTimePicker1.Value.ToShortDateString() + "', 103), '" + textBox3.Text + "', '" + textBox4.Text + "', '" + textBox5.Text + "', '" + textBox6.Text + "', '" + comboBox2.Text + "', '" + comboBox7.Text + "', '" + textBox8.Text + "', '" + textBox9.Text + "', '" + textBox10.Text+ "', '"+ textBox11.Text + "', '" + textBox12.Text + "', '" + comboBox3.Text + "', '" + comboBox4.Text + "', '" + comboBox5.Text + "', '" + comboBox6.Text + "', '" + textBox13.Text + "', '" + textBox14.Text + "', '" + textBox15.Text + "', '" + textBox16.Text + "', GETDATE(), '"+ view_data.value.ToString() +"', 'В ожидании', '"+richTextBox1.Text+"', '"+comboBox8.Text+"', 'Не оплачено')" +
" COMMIT TRANSACTION";

try
{
conn.Open();
}
catch { }
SqlDataReader reader11;
reader11 = cm9.ExecuteReader();
conn.Close();
///////////////////////////////
9 апр 15, 12:35    [17493126]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с GETDATE()  [new]
o-o
Guest
Winnipuh зрит в корень.
злоумышленники могут просто периодически менять дату на том сервере,
а вы из MS опросили в удачный момент, а из программы -- во время диверсии.
вот на моем любимом sisto2 время вообще чуть не на полчаса вперед,
но т.к. сервер не совсем мой, я ее не трогаю.
черт знает где тот сервер стоит, может, у них другой часовой пояс вообще,
бывают же со сдвигом на полчаса

К сообщению приложен файл. Размер - 54Kb
9 апр 15, 12:35    [17493129]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с GETDATE()  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Олег13
Вот функция по вставке данных из C#


SqlCommand cm9 = conn.CreateCommand();
cm9.CommandText = "BEGIN TRANSACTION " +
"insert into ZADANIE_PLAT (USER_ID,PAYER,BRANCH,ISPOLNITEL,PLAN_DATE_PAYMENT,SUMM,NDS,NAZNACHEN_PLATEJ,OBOSNOVANIE,POLUCHAT_PLATEJ,INN_POLUCHATEL,KPP_POLUCHATEL,ACCOUNT_POLUCHATEL,BANK_NAIMENOVAN,BIK_BANK_POLUCHATEL,KOR_ACCOUNT_POLUCHATEL,ARTICLE_BUDGET,DEPARTMENT_ZAYAVITEL,BOSS_DEPARTMENT,OTVETSTVENN_PFM_CFO,GL_BUH,BOSS_RESURS_OBESPECHEN,KAZNACHEYSTVO,BOSS_KAZNACHEYSTVO,DATETIME_CREATE,PERIOD,STATUS,NOTES, SROK_OPLAT, PAY_STATUS) values ('" + Form1.val + "', '" + textBox1.Text + "', '" + comboBox1.Text + "', '" + textBox2.Text + "', convert(datetime,'" + dateTimePicker1.Value.ToShortDateString() + "', 103), '" + textBox3.Text + "', '" + textBox4.Text + "', '" + textBox5.Text + "', '" + textBox6.Text + "', '" + comboBox2.Text + "', '" + comboBox7.Text + "', '" + textBox8.Text + "', '" + textBox9.Text + "', '" + textBox10.Text+ "', '"+ textBox11.Text + "', '" + textBox12.Text + "', '" + comboBox3.Text + "', '" + comboBox4.Text + "', '" + comboBox5.Text + "', '" + comboBox6.Text + "', '" + textBox13.Text + "', '" + textBox14.Text + "', '" + textBox15.Text + "', '" + textBox16.Text + "', GETDATE(), '"+ view_data.value.ToString() +"', 'В ожидании', '"+richTextBox1.Text+"', '"+comboBox8.Text+"', 'Не оплачено')" +
" COMMIT TRANSACTION";

try
{
conn.Open();
}
catch { }
SqlDataReader reader11;
reader11 = cm9.ExecuteReader();
conn.Close();
///////////////////////////////



мне вот этот ход понравился

convert(datetime,'" + dateTimePicker1.Value.ToShortDateString() + "', 103), '" 


а дальше там стоит еще и родная GETDATE()
9 апр 15, 12:39    [17493153]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с GETDATE()  [new]
Glory
Member

Откуда:
Сообщений: 104751
Олег13
Вот функция по вставке данных из C#

И как вы при "вставке" узнали, что "GETDATE() периодически не верно возвращает дату" ?
Только не начинайте рассказывать, что вы задним числом что-то где-то посмотрели в таблице

ЗЫ
Зачем нужна BEGIN TRANSACTION для одиночной команды ?
Зачем нужен COMMIT TRANSACTION без проверки возможности этой команды ?
9 апр 15, 12:41    [17493167]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с GETDATE()  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
select GETUTCDATE()


ну код наворотили значтный, тут уже всё разобрали. ТС, может стоит на UTC перейти?
9 апр 15, 12:42    [17493175]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с GETDATE()  [new]
Олег13
Member

Откуда:
Сообщений: 9
Glory,

Узнал легко, просто у меня есть доступ к этому SQL серваку.
9 апр 15, 12:44    [17493189]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с GETDATE()  [new]
Glory
Member

Откуда:
Сообщений: 104751
Олег13
Узнал легкопросто у меня есть доступ к этому SQL серваку.

Интересно, откуда вы узнали, что именно _вернула_ GETDATE() при выполнении INSERT-а в эту таблицу ?
И причем тут доступ к серверу ?
9 апр 15, 12:47    [17493205]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с GETDATE()  [new]
Олег13
Member

Откуда:
Сообщений: 9
Ребят, слушайте, если не можете помочь, то не надо смеяться и умничать. Я говорю конкретные вещи, не придумываю же. Если я вижу в БД, что вставлена строка с датой отличающейся от текущей на сервере, то что мне думать? GETADATE использую для того, чтобы при вставке записи, дата присваивалась именно с сервера, а не с компа юзера. Это своего рода защита от того, чтобы юзер не перевел календарь назад и не создал запись задним числом. Могу предположить, что проблема связана в чем-то с тем, что часть юзеров являются удаленными (находятся в других филиалах, городах).
Не понимаю причем тут злоумышленники какие-то, какие-то смены дат, бред полный. Сервер стоит у меня под носом, там никто ничего менять не может! ))
9 апр 15, 12:58    [17493282]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с GETDATE()  [new]
Glory
Member

Откуда:
Сообщений: 104751
Олег13
Ребят, слушайте, если не можете помочь, то не надо смеяться и умничать.

Лучше молча слушать глупости и поддакивать ?

Олег13
Я говорю конкретные вещи, не придумываю же.

Вы просто путаете причины и следствия.

Олег13
Если я вижу в БД, что вставлена строка с датой

Вот именно, что "строка с датой" и "потом вижу". А не "функция вернула"
9 апр 15, 13:01    [17493310]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с GETDATE()  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Олег13
Ребят, слушайте, если не можете помочь, то не надо смеяться и умничать. Я говорю конкретные вещи, не придумываю же. Если я вижу в БД, что вставлена строка с датой отличающейся от текущей на сервере, то что мне думать? GETADATE использую для того, чтобы при вставке записи, дата присваивалась именно с сервера, а не с компа юзера. Это своего рода защита от того, чтобы юзер не перевел календарь назад и не создал запись задним числом. Могу предположить, что проблема связана в чем-то с тем, что часть юзеров являются удаленными (находятся в других филиалах, городах).
Не понимаю причем тут злоумышленники какие-то, какие-то смены дат, бред полный. Сервер стоит у меня под носом, там никто ничего менять не может! ))


как вы это видите в БД?
9 апр 15, 13:04    [17493342]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с GETDATE()  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
Олег13
Ребят, слушайте, если не можете помочь, то не надо смеяться и умничать. Я говорю конкретные вещи, не придумываю же. Если я вижу в БД, что вставлена строка с датой отличающейся от текущей на сервере, то что мне думать?
Нужно думать, где же у вас ошибка в коде.
GETDATE() неправильное дату/время вернуть не может.
Олег13
Вот функция по вставке данных из C#
Дальше-то что? Вы бы хоть прокомментировали, куда у вас вставляется неправильная дата. Как вы вообще поняли, что есть ошибка? Покажите данные, напишите комментарий к ним.
9 апр 15, 13:09    [17493381]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с GETDATE()  [new]
o-o
Guest
Олег13
Не понимаю причем тут злоумышленники какие-то, какие-то смены дат, бред полный. Сервер стоит у меня под носом, там никто ничего менять не может! ))

картинки я не подделываю, и что на удаленном сервере по каким-то причинам может быть не та дата -- тоже реальность.
a что сервер у вас локальный вы только сейчас признались, и откуда это нам было знать ранее?
так что не обзывайтесь умниками.

а смеются потому, что именно у тех, кто с первого поста объявляет свой код безгрешным,
в коде же и напортачено
9 апр 15, 13:10    [17493388]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с GETDATE()  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Да и вообще, надо было создать DEFAULT для DATETIME_CREATE.
И не заморачиваться этим в INSERTе.

Кстати, а у таблицы триггеры на вставку есть? Что там происходит?
9 апр 15, 13:16    [17493439]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с GETDATE()  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Да! Чуть не забыл. А может, кто-то уже после вставки сделал UPDATE этой даты?
9 апр 15, 13:17    [17493446]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с GETDATE()  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
Олег13
Ребят, слушайте, если не можете помочь, то не надо смеяться и умничать. Я говорю конкретные вещи, не придумываю же. Если я вижу в БД, что вставлена строка с датой отличающейся от текущей на сервере, то что мне думать? GETADATE использую для того, чтобы при вставке записи, дата присваивалась именно с сервера, а не с компа юзера. Это своего рода защита от того, чтобы юзер не перевел календарь назад и не создал запись задним числом. Могу предположить, что проблема связана в чем-то с тем, что часть юзеров являются удаленными (находятся в других филиалах, городах).
Не понимаю причем тут злоумышленники какие-то, какие-то смены дат, бред полный. Сервер стоит у меня под носом, там никто ничего менять не может! ))

Картинка с другого сайта.
9 апр 15, 13:29    [17493537]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с GETDATE()  [new]
Arm79
Member

Откуда: МО, Раменское
Сообщений: 3695
Ну и немного спама:
1) Не надо писать BEGIN/COMMIT TRANSACTION как SQL. Изучите класс TransactionScope
2) не надо писать sql запрос обычной конкатенацией строк, это риск sql injection. Используются параметры
3) При инсерте используется не ExecuteReader (который получает рекордсет с сервера), а ExecuteNonQuery
4) Нет нормальной обработки IDisposable

А так да, код 1000% правильный.
9 апр 15, 19:03    [17495460]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с GETDATE()  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Arm79
Ну и немного спама:
1) Не надо писать BEGIN/COMMIT TRANSACTION как SQL. Изучите класс TransactionScope
2) не надо писать sql запрос обычной конкатенацией строк, это риск sql injection. Используются параметры
3) При инсерте используется не ExecuteReader (который получает рекордсет с сервера), а ExecuteNonQuery
4) Нет нормальной обработки IDisposable

А так да, код 1000% правильный.


ну, справедливости ради 1000%- эти 4 пункта = 996%.
Но я бы еще ложку мёда добавил, отдавая должно настойчивости и безмятежности ТС, задушил возможный catch и верит, что у ридера всё будет хорошо:

try
{
conn.Open();
}
catch { }

SqlDataReader reader11;
reader11 = cm9.ExecuteReader();
conn.Close();


значит пока 995%, но там еще есть....
9 апр 15, 19:11    [17495512]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить