在存储过程中设置日期和时间

时间:2016-09-28 15:03:33

标签: c# asp.net sql-server date time

我目前在使用C#asp.net打印输出时遇到问题。我已经构建了一个包含查询的存储过程,如果用户尝试在网站上登录的登录日期和时间介于特定的开始和结束时间之间,那么将选择用户名。所以这是我使用sql server的代码:

CREATE PROCEDURE [dbo].[access]
    (@DateNow as varchar(50),  
     @studentnum as varchar(50)
    )
AS
IF EXISTS(SELECT StudentNum 
          FROM users, enlistment 
          WHERE StudentNum LIKE '13%' 
          AND @DateNow BETWEEN '2016-09-28 00:00:00.000' AND endtime)
    SELECT username FROM users, enlistment 
    WHERE StudentNum LIKE '13' + @studentnum 
    AND @DateNow BETWEEN starttime AND endtime

这是我在c#中的代码

SqlCommand cmd3 = new SqlCommand("access", connection); 
SqlParameter useraccess = new SqlParameter("studentnum", fourNum);
string datenow = DateTime.Now.ToString("MMMM dd yyyy hh:mm");
SqlParameter date = new SqlParameter("DateNow", datenow);

cmd3.Parameters.Add(useraccess);
cmd3.Parameters.Add(date);
cmd3.CommandType = CommandType.StoredProcedure;
lblStatus.Text = Convert.ToString(cmd3.ExecuteScalar());

执行后,lblStatus.Text应显示尝试登录的人的用户名。不幸的是,该网站没有显示它。我的代码有问题吗?

1 个答案:

答案 0 :(得分:1)

这是对您使用日期的修正,而不是您未获得预期结果的答案。

始终使用.net和sql server中的本机数据类型,绝不使用类型的字符串表示形式!

更改了sp签名

CREATE PROCEDURE [dbo].[access]
    (@DateNow as Date,  -- change this to Date or DateTime or DateTime2 accordingly
     @studentnum as varchar(50)
    )
-- rest of stored proc does not have to change

更改了c#代码

SqlParameter date = new SqlParameter("@DateNow", SqlDbType.Date) {Value = System.DateTime.Now.Date};
// or with time
// SqlParameter date = new SqlParameter("@DateNow", SqlDbType.DateTime) {Value = System.DateTime.Now};