SQL Server принимает только дату, а не дату и время из VB

У меня странная проблема (только) с одним из столбцов базы данных SQL Server, который объявлен как datetime. Это более крупное приложение, и я использую множество таблиц со столбцами datetime, и все они установлены правильно (дата и время), кроме одной.

Синтаксис (например) такой:

FKMachineMeasureModulesMachineMeasureHistoryBindingSource.Current("LastTested") = Now()

Соединение с SQL Server осуществляется через наборы данных. Поэтому я предположил, что, возможно, объявление столбца, вероятно, было установлено на date вместо datetime, но нет, везде объявлено правильно.

Однако приведенный выше оператор приводит к результату «2024-07-18 00:00:00.000» в таблице SQL Server.

Если я обновлю столбец через SSMS, запустив

UPDATE [Machine_MeasureModules] 
SET RLastTested = '18.07.2024 15:10' 
WHERE id = 15271

правильно установлено значение 2024-07-18 15:10:00.000.

Когда я отлаживаю строку и обновляю код, браузер встроенных переменных также показывает ее правильно. А вот на SQL Server всегда без времени.

Я также попробовал для этого конкретного столбца преобразовать формат Now(), но результат тот же.

требуется определение схемы таблицы и набора данных

Mitch Wheat 18.07.2024 15:39

Правильно ли это работает, если вы используете UPDATE ... Now() вместо жестко закодированной строки? Пытаюсь определить, заключается ли проблема в том, что Now() не включает время, или, возможно, в таблице есть триггер вставки, который удаляет время и не запускается при обновлении.

testing-for-ya 18.07.2024 17:49

(И еще, как именно вы проверяете results in '2024-07-18 00:00:00.000' in the SQL Server table.?)

testing-for-ya 18.07.2024 18:50

Похоже, что ваш код применяет дату в строковом формате вместо фактического экземпляра DateTime, и я удивлен, что формат даты работает вдвое так же хорошо, как и сейчас. На самом деле вам следует отправлять реальный экземпляр DateTime, но если вам нужны значения в строковом формате, используйте универсальный формат yyyy-MM-ddTHH:mm:ss (обратите внимание на разделитель T), чтобы избежать настроек DATEFORMAT в текущем соединении, например: db<>fiddle .

AlwaysLearning 18.07.2024 23:43

@testing-for-ya: В этом суть: Now() используется примерно в сотне других случаев в проекте с точно таким же синтаксисом, и везде он работает так, как должен. Фиксация в VB после присвоения значения выполняется с помощью FKMachineMeasureModulesMachineMeasureHistoryBindingSource.En‌​dEdit() Machine_MeasureModulesTableAdapter.Update(DataSet_Machine.Ma‌​chine_MeasureModules‌​) и проверяется точкой останова сразу после этого, браузер/проводник переменных, вызываемый <shift><F9>, показывает правильную дату и время. Но SELECT .. в базе данных SQL через SMSS показывает это без времени.

Werner 19.07.2024 11:00

@AndrewMorton: региональные настройки установлены правильно, поскольку они хорошо работают, как упоминалось выше, для сотен подобных утверждений.

Werner 19.07.2024 11:01

@AlwaysLearning: Во-первых, спасибо за ваши усилия помочь! Дело в том, что нигде во всем коде не выполняется форматирование строки Now(). Ни в этом конкретном заявлении.

Werner 19.07.2024 11:32

@Werner Использует ли код VB параметры SQL для передачи значений? (Но не используйте AddWithValue, поскольку это может вызвать проблемы.)

Andrew Morton 19.07.2024 12:01

@AndrewMorton Нет. Набор данных действует как интерфейс для VB с помощью tableadapter и bindingsource. В моем примере я обновляю bindingsource напрямую. Опять же, те же методы и интерфейс, которые я использую и везде.

Werner 19.07.2024 12:46

Откройте сгенерированный кодом файл класса для набора данных и дважды проверьте, какой тип используется в этом наборе данных. Я подозреваю, что набор данных не создается повторно после внесения изменений.

Albert D. Kallal 20.07.2024 18:56

@AlbertD.Kallal Я уже это сделал, и да, DBType, объявленный в .xsd, был установлен на Date вместо DateTime. Поэтому я вручную пропатчил .xsd и перекомпилировал проект, но не помогло. Однако в диспетчере источников данных я удалил столбец и сразу же добавил его снова. И: случилось чудо, теперь тип установлен правильно, и столбец сохраняет и показывает дату и время. Так что спасибо, что подтолкнули меня проверить это еще раз. Вопрос решен

Werner 20.07.2024 19:31
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
11
96
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы решить эту проблему, в диспетчере источников данных я удалил столбец и сразу же добавил его снова. И: случилось чудо, теперь тип установлен правильно, и столбец сохраняет и показывает дату и время.

Другие вопросы по теме