asp.net中的GetDate()问题

时间:2009-02-15 16:04:13

标签: sql-server datetime

我遇到GetDate()方法的问题。当我创建任何新用户时,在DateTime字段中日期正确到来时间不正确,它应该显示始终生成系统日期和时间.Ex:2/6/2009上午12:00:00,2009年2月7日上午12:00:00,2009年2月8日上午12:00:00等我的意思是这里 日期正在改变,但系统时间不会改变。 这是我的代码:

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 个答案:

答案 0 :(得分:4)

我建议做两处修改:

  • 将存储过程的参数更改为datetime2,而不仅仅是date。 (还有其他选项,例如datetimeoffset。)日期类型存储日期,因此您没有看到任何时间就不足为奇了:)您将需要如果其架构使用date列,也要更改表。
  • 调用时,请勿将参数值转换为字符串。使用

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

您可能还想考虑使用UTC而不是服务器上的本地时间。

编辑:splattne绝对正确 - 通过在存储过程中调用GetDate,您的参数值无关紧要。假设您确实想要使用该参数,请将存储过程的主体更改为:

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

仔细检查Login.DateTime的类型!

答案 1 :(得分:4)

如果您在存储过程中使用getdate(),则参数@ DateTime已过时。根据您的代码示例,它将被忽略。

因此,如果我正确地解释了您的问题,问题的根源必须在其他地方。

我会检查SQL表中的日期列的数据类型。表声明应该是:

UserName varchar(50)
Password varchar(50)
EmailId  varchar(50)
DateTime DateTime  /* not "Date" */

答案 2 :(得分:2)

您必须使用Sql 2008,并使用新的Date数据类型。

  

CREATE PROCEDURE dbo.NewUser(@UserName varchar(50),@ Password varchar(50),@ EmailId varchar(50),@ DateTime Date)

更改Sql代码以使用DateTime(以及表格,如有必要),您应该设置。

答案 3 :(得分:1)

使用DateTime.Now的日期

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

我的建议也是使用UTC instaed

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