c# - UtcNow 返回有缺陷的时间戳

标签 c# asp.net

我几年前写过这个系统,现在不写任何 C#,所以这对我来说有点生疏。我使用下面显示的代码写出一条新记录。由于某些原因,@TStamp 有时没有正确写出(SQL Server 12):

enter image description here

可以看出,我有时会在时间部分得到零。通常,会有一组记录来自同一个网络用户,但有时它只是一个孤立的事件。这个问题肯定是间歇性的和不频繁的。

我的问题是:是否有任何东西会导致 utcNow 返回如下所示的时间戳(即正确的日期、零时间)?

        protected void MessageDataSrc_Inserting(object sender, SqlDataSourceCommandEventArgs e)
        {
            e.Command.Parameters["@CoID"].Value = clsCompany.GetCompanyNumber();
            e.Command.Parameters["@TStamp"].Value = DateTime.UtcNow;
            e.Command.Parameters["@Sender"].Value = clsUser.LoggedInUserName();
            e.Command.Parameters["@Message"].Value = MessageMemoBox.Value;
            e.Command.Parameters["@Memo"].Value = "";
            e.Command.Parameters["@Receiver"].Value = ReceiverComboBox.Value;
            e.Command.Parameters["@NoteCode"].Value = Int32.Parse(noteRadioButtons.SelectedValue);
            e.Command.Parameters["@Urgent"].Value = cboxUrgent.Checked;
            e.Command.Parameters["@Status"].Value = 1;          // new message status
            . . . //unimportant stuff cut out

            c = null;
        }

编辑

此字段在系统中唯一更新的时间是用户编辑项目时。以下代码与这些更新有关:

SelectCommandType="StoredProcedure"                
SelectCommand="usp_eSwitchBoard_SelectNewMsgs"
DeleteCommand="DELETE FROM [Message] WHERE [CoID] = @CoID AND [ID] = @ID" 
UpdateCommand="UPDATE [Message] SET [TStamp] = @TStamp, [Sender] = @Sender, (...) WHERE [CoID] = @CoID AND [ID] = @ID"
onselecting="MessageDataSrc_Selecting" onupdating="MessageDataSrc_Updating">
<DeleteParameters>
    <asp:Parameter Name="CoID" Type="Int32" />
    <asp:Parameter Name="ID" Type="Int64" />
</DeleteParameters>
<InsertParameters>
    <asp:Parameter Name="CoID" Type="Int32" />
    <asp:Parameter Name="TStamp" Type="DateTime" />
    <asp:Parameter Name="Sender" Type="String" />

. . .

编辑 #2

存储Px以供选择。此存储过程未用于选择上面的示例输出,但是,它用于为用户提供可供编辑的记录选择。问题字段在 order by 中被引用,但仅此而已。

BEGIN
    SET NOCOUNT ON;
    SELECT M.*, U."NAME" AS "SenderName" FROM "Message" M, "User" U
      WHERE M."CoID" = @COID AND "Receiver" = @RECEIVER AND
            M."Status" = 1 AND
            M."CoID" = U."CoID" AND M."Sender" = U."ID"
              ORDER BY "TStamp" DESC
END

编辑 #3

MessageDataSrc_Updating 的来源

    protected void MessageDataSrc_Updating(object sender, SqlDataSourceCommandEventArgs e)
    {
        e.Command.Parameters["@CoID"].Value = clsCompany.GetCompanyNumber();
        e.Command.Parameters["@Sender"].Value = clsUser.LoggedInUserName();
    }

最佳答案

在 MessageDataSrc_Updating 的方法中,我没有看到包含在中使用的@TStamp 参数

UpdateCommand="UPDATE [Message] SET [TStamp] = @TStamp, [Sender] = @Sender, (...) WHERE [CoID] = @CoID AND [ID] = @ID"

你不应该像下面这样在方法中包含这个参数吗??

protected void MessageDataSrc_Updating(object sender, SqlDataSourceCommandEventArgs e)
{
    e.Command.Parameters["@CoID"].Value = clsCompany.GetCompanyNumber();
    e.Command.Parameters["@Sender"].Value = clsUser.LoggedInUserName();

    e.Command.Parameters["@TStamp"].Value = DateTime.UtcNow; // Appears to be missing
}

是否有可能由于某处设置的默认值,这些只是更新的条目,时间戳设置在当前日期的午夜(相当于 DateTime.UtcNow.Date)。

关于c# - UtcNow 返回有缺陷的时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25691087/

相关文章:

c# - c#中的日期格式转换

c# - 如何在 Worker Role 托管的 Web API 中获取客户端服务器的唯一标识符

c# - 使用前设置 StringBuilder?

asp.net - 如何在 Controller 中获取路由 url?

asp.net - Web 管理工具 : Unable to connect to SQL Server database on another computer

c# - 在 ASP.NET 中向页眉添加控件

c# - 如何从 C# 生成动态 <li> 标签和超链接

c# - 假冒Faker : How to pick a random enum value

c# - 如何在xamarin中获取当前的gps坐标

c# - 通过 C# 解析 csproj - 无法解析 ItemGroup