我遇到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());
答案 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)