【发布时间】:2015-10-30 11:32:41
【问题描述】:
我正在尝试从另一个日期中减去一个日期来计算天数差异。它返回类似于735907 的差异。为什么 ?它应该返回 6,7 或 10 等。
场景:
我从通过 SP 从数据库获取的另一个日期中减去我在 TEXTCHANGED 事件中传递到文本框的日期。
alter PROCEDURE [dbo].[SelectBillSubmissionDateByBilliD]
@pk_BillsInfo_BillID int,
@BillSubmissionDate date output
AS
BEGIN
Set @BillSubmissionDate= (Select BillsInfo.BillSubmissionDate
from BillsInfo
Where BillsInfo.pk_BillsInfo_BillID= @pk_BillsInfo_BillID)
END
然后
Bills.ManageBillsInfo MngBillsInfo = new Bills.ManageBillsInfo();
protected void ddlBills_SelectedIndexChanged(object sender, EventArgs e)
{
Int32 BillID= Convert.ToInt32(ddlBills.SelectedValue);
MngBillsInfo.BillSubmissionDate = MngBillsInfo.SelectBillSubmissionDateByBillID(BillID);
}
protected void txtBoxBillPassingDate_TextChanged(object sender, EventArgs e)
{
DateTime BillPassingDate = Convert.ToDateTime(txtBoxBillPassingDate.Text);
lblDelay.Visible = true;
lblDelay.Text = Convert.ToString( (BillPassingDate - MngBillsInfo.BillSubmissionDate).Days);
}
}
注意:MngBillsInfo.BillSubmissionDate 属于日期时间,调试时返回 1/1/0001。为什么?
更新:
我正在调用的函数:
public DateTime SelectBillSubmissionDateByBillID(int BillID)
{
SqlCommand SqlCom = new SqlCommand("SelectBillSubmissionDateByBilliD", DatabaseConnection.OpenConnection());
SqlCom.CommandType = CommandType.StoredProcedure;
SqlCom.Parameters.AddWithValue("@pk_BillsInfo_BillID", BillID);
SqlParameter SqlParamBillSubmissionDate = new SqlParameter("@BillSubmissionDate", SqlDbType.Date);
SqlCom.Parameters.Add(SqlParamBillSubmissionDate);
SqlParamBillSubmissionDate.Direction = ParameterDirection.Output;
SqlCom.ExecuteNonQuery();
DatabaseConnection.CloseConnection();
DateTime BillSubmissionDate = Convert.ToDateTime(SqlParamBillSubmissionDate.Value);
return BillSubmissionDate;
}
【问题讨论】:
-
1/1/0001 是
DateTime.MinValue。该属性未设置。在这种情况下,736,000 天听起来确实是正确的。大约 365 * 2015。 -
看起来您的存储过程返回 null。由于
DateTime是值类型,不能为null,所以设置为DateTime.MinValue,即1/1/001 -
@krillgar 好的先生,那该怎么办?
-
@AndyKorneyev 好的,先生,那么该怎么做才能使它正确?
-
检查您的存储过程,看看它是否真的返回任何信息。我不认为你想要一个
SET在那里。只要是SELECT。
标签: c# asp.net sql-server ado.net