首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SqlDateTime时.ExecuteReader溢出

使用SqlDateTime时.ExecuteReader溢出
EN

Stack Overflow用户
提问于 2016-02-23 17:01:45
回答 2查看 604关注 0票数 0

在执行asp页面上使用的读取器时,我会收到此错误:

SqlDateTime溢出必须在1/1/1753 12:00上午12:00至12/31/9999 11:59:59下午

从日历中选择日期,并将其设置为DateTime变量,然后将该变量用作SQL命令中的参数。它似乎随机工作,我选择一个日期一次,它工作,我重新加载页面,并选择同一天,它可能无法工作。

我的相关代码在下面,我在.ExecuteReader()行上得到了错误。在执行读取器之前,我已经检查了confirmedDate变量,并且它确实有一个有效的DateTime

代码语言:javascript
复制
    DateTime confirmedDate = DateTime.Parse(dateSelected);
    SqlCommand command4 = new SqlCommand();
    command4.Connection = gconn;
    String sql4 = "SELECT MAX([Day]) as TheDay FROM Days WHERE User_ID = @User_ID AND [Day] < @dateSelected AND NOT EXISTS (SELECT 1 FROM Days WHERE User_ID = @User_ID AND [DAY] >= @dateSelected)";
    command4.CommandText = sql4;
    command4.Parameters.Add(new SqlParameter("@User_ID", ""));
    command4.Parameters.Add(new SqlParameter("@dateSelected", confirmedDate));


for (int i = 0; i < firstName.Count; i++ )
{
    command4.Parameters["@User_ID"].Value = userID[i];

    using (SqlDataReader reader = command4.ExecuteReader()) //error here
    {
        while (reader.Read())
        {
            if (reader.HasRows)
            {
                if (reader["TheDay"].ToString() == "") 
                {
                    dates.Add("NULL"); 
                }
                else
                {
                    dates.Add(reader["TheDay"].ToString());
                }
            }
        }
    }
}   

我已经找到了关于这个问题的其他问题,但是找不到一个可行的解决方案。一个有效的DateTime值总是被传入。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-23 17:10:27

.net DateTime对象的可能范围不同于Server对象。您应该在将其插入sql查询之前进行一些参数验证。

下面是一个例子。

代码语言:javascript
复制
DateTime confirmedDate = DateTime.Parse(dateSelected);
if(confirmedDate > DateTime.Now) throw new ArgumentOutOfRangeException("Date time cannot be in the future");
if(confirmedDate.Year < 1990)  throw new ArgumentOutOfRangeException("Sorry, we only have data starting from the year 1990");

还可以在参数中指定数据类型。

代码语言:javascript
复制
command4.Parameters.Add(new SqlParameter("@dateSelected", SqlDbType.DateTime){Value = confirmedDate}));

.Net DateTime的范围

可能的Sql DateTime的范围

  • 最小值-1/1 1753 12:00:00 AM
  • 最大值- 12/31/9999 11:59:59下午
票数 3
EN

Stack Overflow用户

发布于 2016-02-23 17:11:17

将第二个@dateSelected替换为另一个名称@datested2,并将其添加为第三个参数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35583651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档