我遇到了datetime元素的问题。
我使用SP存储datetime
值(lastwritetime
),我从FileInfo
元素中获取它。
我使用此SP来插入我的数据:
ALTER PROCEDURE [dbo].[ps_AddImageToCategory](
@catID numeric(6,0),
@newImageName varchar(50),
@newImageJpgLoc varchar(255),
@newImageTargaLoc varchar(255),
@newImageIsInUse int,
@dateCreation datetime,
@dateexpiration datetime)
AS
BEGIN
SET XACT_ABORT, NOCOUNT ON
DECLARE @starttrancount int
BEGIN TRY
SELECT @starttrancount = @@TRANCOUNT
IF @starttrancount = 0
BEGIN TRAN ps_AddImageToCategory_tran
INSERT INTO [dbo].[ZIMG_Image]
(CIMG_ID,
IMG_Name,
IMG_Localisation,
IMG_TargaFile,
InUse,
IMG_DateCreation,
IMG_DateExpiration)
VALUES(@catID,
@newImageName,
@newImageJpgLoc,
@newImageTargaLoc,
@newImageIsInUse,
@dateCreation,
@dateexpiration)
IF @starttrancount = 0
COMMIT TRAN ps_AddImageToCategory_tran
END TRY
BEGIN CATCH
IF XACT_STATE() <> 0 AND @starttrancount = 0
BEGIN
ROLLBACK TRAN ps_AddImageToCategory_tran
EXECUTE [dbo].[isp_LogError]
END
EXECUTE [dbo].[isp_RaiseError]
END CATCH
END
我用这段代码打电话给我的SP:
public bool InsertZimgImage(ZIMG_Image imageToInsert)
{
using (var conn = InitSqlConnection())
using (var cmd = new SqlCommand("ps_AddImageToCategory", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@catID", imageToInsert.CIMG_ID);
cmd.Parameters.AddWithValue("@newImageName", imageToInsert.IMG_Name);
cmd.Parameters.AddWithValue("@newImageJpgLoc", imageToInsert.IMG_Localisation);
cmd.Parameters.AddWithValue("@newImageTargaLoc", imageToInsert.IMG_TargaFile);
cmd.Parameters.AddWithValue("@newImageIsInUse", (imageToInsert.InUse ? 1 : 0));
cmd.Parameters.AddWithValue("@dateCreation", imageToInsert.IMG_DateCreation);
cmd.Parameters.AddWithValue("@dateexpiration", imageToInsert.IMG_DateExpiration);
conn.Open();
if (cmd.ExecuteNonQuery() != 0)
return true;
}
return false;
}
之后,我每小时检查一次我文件的lastwritetime
是否与数据库中的值不同。如果它是différents,我更新数据库并进行一些操作。
我的错误是当我进行DateTime.Compare
操作时。
实际上,数据值永远不会相同。即使我们不编辑文件。
我的第一个屏幕截图是插入数据库的日期时间的调试值:
第二个屏幕截图是关于FileInfo
元素中的日期时间:
我当然看到价值Hour
,Kind
和Ticks
不同,但我无法解释原因。
为了您的信息,我一直在我的C#程序中使用对象DateTime
,并且我没有改变发送到我的SP的DateTime
项目。
看起来插入数据库时会丢失数据
我希望有人可以向我解释为什么我在两个相同日期之间存在这种差距以及如何解决这个问题。感谢
答案 0 :(得分:2)
这里发生了两件事情的混合
Kind=Local
表示,当您将日期存放在数据库中时,会丢失该信息。datetime
values in SQL Server的精度四舍五入为.000,.003或.007秒的增量。这解释了为什么762毫秒变为763. 因此,你永远不会在这些日期之间取得平等。
解决方法又是双重的