проблема с GetDate () в asp.net - PullRequest
       11

проблема с GetDate () в asp.net

2 голосов
/ 15 февраля 2009

У меня проблема с методом GetDate (). Когда я создаю любого нового пользователя, в поле DateTime Дата наступает правильно, время идет неправильно, оно должно показывать всегда генерировать системную дату и время. Пример: 06.02.2009 12:00:00, 2/7/2009 12:00:00 AM, 2/8/2009 12:00:00 AM и т.д. Я имею в виду здесь дата меняется, но системное время не меняется. Вот мой код:

CREATE PROCEDURE dbo.NewUser
(
@UserName varchar(50),
@Password varchar(50),
@EmailId varchar(50),
@DateTime Date
)
AS
insert into Login(UserName,Password,EmailId,DateTime)
       values(@UserName,@Password,@EmailId,GetDate())


com.Parameters.Add("@DateTime", DateTime.Now.ToShortTimeString());

Ответы [ 4 ]

4 голосов
/ 15 февраля 2009

Если вы используете getdate () в вашей хранимой процедуре, ваш параметр @ DateTime устарел. Согласно вашему примеру кода, он будет игнорироваться.

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

Я бы проверил тип данных столбца даты в таблице SQL . Объявление таблицы должно быть:

UserName varchar(50)
Password varchar(50)
EmailId  varchar(50)
DateTime DateTime  /* not "Date" */
4 голосов
/ 15 февраля 2009

Я бы предложил два изменения:

  • Измените параметр хранимой процедуры на datetime2 вместо просто date. (Есть и другие варианты, такие как datetimeoffset.) Тип даты only хранит дату, поэтому неудивительно, что вы не видите ни разу Вам нужно будет также изменить таблицу, если ее схема использует столбец date.
  • Не преобразовывайте значение параметра в строку при вызове. Используйте

    com.Parameters.Add("@DateTime", DateTime.Now);
    

Возможно, вы также захотите использовать UTC вместо местного времени на сервере.

EDIT: splattne абсолютно прав - вызывая GetDate в хранимой процедуре, значение вашего параметра не имеет значения. Предполагая, что вы действительно хотите использовать параметр, измените тело вашего хранимого процесса на:

   insert into Login(UserName, Password, EmailId, DateTime)
   values(@UserName, @Password, @EmailId, @DateTime)

Дважды проверьте тип Login.DateTime хотя!

2 голосов
/ 15 февраля 2009

Вы должны использовать Sql 2008 с новым типом данных Date.

СОЗДАНИЕ ПРОЦЕДУРЫ dbo.NewUser (@UserName varchar (50), @Password varchar (50), @EmailId varchar (50), @DateTime Date)

Измените код Sql, чтобы использовать DateTime (и таблицу, если необходимо), и вы должны быть установлены.

1 голос
/ 15 февраля 2009

Использовать дату DateTime.Now

com.Parameters.Add("@DateTime", DateTime.Now.Date)

Также я предлагаю использовать UTC вместо

com.Parameters.Add("@DateTime", DateTime.UtcNow.Date)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...