gpt4 book ai didi

c# - 传递给存储过程的日期参数未按预期工作

转载 作者:太空狗 更新时间:2023-10-30 01:05:28 26 4
gpt4 key购买 nike

我在我的项目中遇到了一个问题,我将日期作为 09/03/2013 23:59:59 传递给存储过程,但在分析器中看到 .net 将其转换为 09/04/2013 00:00:00

为了确认我创建了一个小型测试应用程序(任何人都可以用它来复制,我使用的是 .Net 4.5 和 Sql server 2012 Express Edition)。

下面是测试代码:

DateTime startdate = DateTime.Parse("09/03/2013");
DateTime endDate = startdate.AddDays(1).AddTicks(-1);
try
{
using (SqlConnection konekcija = new SqlConnection(ConfigurationManager.ConnectionStrings["default"].ToString()))
{

konekcija.Open();

using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = konekcija;

cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "[Interface].[uspTestDateParameter]";

cmd.Parameters.AddWithValue("@CurrentDate", startdate);
cmd.Parameters.AddWithValue("@BatchEndDate", endDate);
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
// Fill the DataSet using default values for DataTable names, etc
DataSet dataset = new DataSet();
da.Fill(dataset);
DataTable dt = dataset.Tables[0];
//return dataset;
}
}
}
}
catch (Exception ee)
{

}

程序如下:

CREATE PROCEDURE [Interface].[uspTestDateParameter]
(
@CurrentDate DateTime
,@BatchEndDate DateTime
)
AS
BEGIN
Declare @table table (strt Datetime ,endT Datetime )

Insert into @table values (@CurrentDate,@BatchEndDate)

Select * from @table
END

返回的结果集是 9/3/2013 12:00:00 AM 9/4/2013 12:00:00 AM

我可以附上数据集可视化工具的屏幕截图,但不能这样做,因为它需要声誉 10。但上面是我得到的两列 (strt,enDt) 的值。

有人可以帮忙吗?由于这个原因,我的过程在生产中失败。

最佳答案

DATETIME 按此处所述四舍五入:

http://technet.microsoft.com/en-us/library/ms187819.aspx

本文明确指出所有值都在 .000、.003 或 .007 秒左右。用户指定的日期时间 01/01/98 23:59:59.999 将始终存储为 1998-01-02 00:00:00.000

为什么不使用刻度,为什么不能执行以下操作?

DateTime endDate = startdate.AddDays(1).AddSeconds(-1);

这将实际上传递您所说的传递日期 (09/03/2013 23:59:59),而不是差一个刻度下一秒。

或者,使用 DATETIME2 作为您的 SQL 数据类型,根据文档,其精度为 100ns(一次滴答):

http://technet.microsoft.com/en-us/library/bb677335.aspx

关于c# - 传递给存储过程的日期参数未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18663810/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com