SqlDateTime溢出.必须在1753年1月12日12:00:00 AM和9999年12月31日11:59:59 P

本文关键字:AM 9999年 31日 12月 SqlDateTime 1753年 1月 12日 溢出 | 更新日期: 2023-09-27 18:10:48

像这样的问题我似乎找不到正确的答案。

我正在使用这段代码来分配应该保存在数据库中的日期。

request.BranchRequestDate = DateTime.Now;

当我尝试使用这个函数从表中检索数据时。

public Request SelectByID()
    {
        try
        {
            SqlCommand command = this.GetParametizedCommand("SELECT * FROM Request WHERE RequestUID = '" + this.RequestUID.ToString() + "' ;");
            command.CommandType = CommandType.Text;
            SqlDataAdapter adapter = new SqlDataAdapter(command);
            DataTable tbl = new DataTable();
            adapter.Fill(tbl); //This is where the exception is thrown
            return ToEntity(tbl);
        }
        catch
        {
            return null;
        }
    }

…它抛出一个异常。

我试过检查一切,但我无法弄清楚的是为什么它抛出和异常,因为我看不见在c#中检索到的数据是什么样子,但我已经尝试了SQL Server本身的语句,它返回正确的数据。

任何想法?

编辑:我还将它与同一程序中的类似函数进行了比较,它的功能很好。

编辑:getparameteredcommand方法的代码

public SqlCommand GetParametizedCommand(String commandText)
    {
        try
        {
            SqlCommand command = base.GetSqlCommand(commandText);
            if(SavingStatus == Util.SavingStatus.INSERT)
                command.Parameters.Add(new SqlParameter("@RequestUID", SqlDbType.Int,32, ParameterDirection.Output, false, 38, 38, "RequestUID", DataRowVersion.Default, this.RequestUID));
            else if (SavingStatus == Util.SavingStatus.UPDATE || SavingStatus == Util.SavingStatus.DELETE)
                command.Parameters.Add(new SqlParameter("@RequestUID", SqlDbType.Int,32, ParameterDirection.Input, false, 38, 38, "RequestUID", DataRowVersion.Default, this.RequestUID));
            command.Parameters.AddWithValue("@DisplayID", this.DisplayID);
            command.Parameters.AddWithValue("@BranchUID", this.BranchUID);
            command.Parameters.AddWithValue("@EmployeeUID", this.EmployeeUID);
            command.Parameters.AddWithValue("@BranchRequestDate", this.BranchRequestDate);
            command.Parameters.AddWithValue("@IsDeleted", this.IsDeleted);
            return command;
        }
        catch
        {
            return null;
        }
    }

SqlDateTime溢出.必须在1753年1月12日12:00:00 AM和9999年12月31日11:59:59 P

异常可能发生,因为当您使用SELECT语句调用GetParametizedCommand时,this.BranchRequestDate尚未初始化。

因为this.BranchRequestDate没有初始化,它等于DateTime.MinValue,这不是一个有效的SQL datetime值。

您可以为DateTime.MinValue添加显式检查,并避免在这种情况下添加参数:

if (this.BranchRequestDate != DateTime.MinValue)
    command.Parameters.AddWithValue("@BranchRequestDate", this.BranchRequestDate);

或者您可以创建一个不为SELECT语句添加任何参数的GetCommand方法