Как правильно передать datetime из c # в sql?

У меня есть таблица и дата и время в ней находятся в формате:

2011-07-01 15:17:33.357

Я использую c # DateTime, когда выполняю .ToString () для объекта. Я получаю DateTime в формате:

04/07/2011 06:06:17

Мне интересно как я правильно передаю правильный DateTime, потому что, когда я запускаю SQL, который находится в нашем коде, он не работает (т.е. выбираю правильный DateTime). Я не могу использовать профилировщик SQL.

Это код:

//looks to if a user has had any activity in within the last time specified
        public bool IsUserActivitySinceSuppliedTime(int userId, DateTime since)
        {
            //get everything since the datetime specified [usually 5 hours as this is 
            //how long the session lasts for
            string sql = "SELECT * FROM tbl_webLogging WHERE userid = @userid AND DateAdded > @sinceDateTime";

            SqlParameter sinceDateTimeParam = new SqlParameter("@sinceDateTime", SqlDbType.DateTime);
            sinceDateTimeParam.Value = since;

            SqlCommand command = new SqlCommand(sql);
            command.Parameters.AddWithValue("@userid", userId);
            command.Parameters.Add(sinceDateTimeParam);


            using (SqlDataReader DataReader = GetDataReader(command))
            {
                if (DataReader.HasRows)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }


        }

ОБНОВЛЕНИЕ *******************

Я выполнил следующие операции с данными :

SELECT * FROM tbl_webLogging 
WHERE userid = 1 
AND DateAdded > '2011-07-01 07:19:58.000'

И

SELECT * FROM tbl_webLogging 
WHERE userid = 1 
AND DateAdded > '04/07/2011 07:19:58'

Один возвращает 53 записи, другой возвращает 69 записей. Как это может быть? И когда я передаю DateTime (07.04.2011 07:19:58) из c # в SQL, записи не отображаются вообще!

26
задан SynozeN Technologies 24 May 2017 в 12:27
поделиться

1 ответ

У меня было много проблем, связанных с C # и SqlServer. Я закончил тем, что сделал следующее:

  1. На SQL Server я использую тип столбца DateTime
  2. На c # я использую .ToString ("гггг-ММ-дд ЧЧ: мм: сс ") метод

Также убедитесь, что все ваши машины работают в одном часовом поясе.

Что касается различных наборов результатов, которые вы получаете, ваш первый пример «Первое июля» , а второй «4 июля» ...

Второй пример также можно интерпретировать как «7 апреля», это зависит от конфигурации локализации вашего сервера (мое решение не страдает от этой проблемы).

РЕДАКТИРОВАТЬ: hh был заменен на HH, так как он, кажется, не фиксирует правильный час в системах с AM / PM, в отличие от систем с 24-часовыми часами. Смотрите комментарии ниже.

7
ответ дан 28 November 2019 в 07:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: