2014-09-05 94 views
2

我几年前写了这个系统,现在不写任何C#,所以这对我来说有点生疏。我使用下面显示的代码写出一条新记录。出于某种原因,@TStamp有时不写出来的正确(SQL服务器12):UtcNow返回有缺陷的时间戳

对场合时间部分

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用于选择。此存储过程不用于选择上面的示例输出,但是它用于向用户提供可供编辑的记录选择。问题字段是按顺序引用的,但就是这样。

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(); 
    } 
+0

我不明白为什么它会返回。我很好奇数据库中TStamp的字段类型是什么。你也有一个SQL插入样本发送到服务器。我想知道是否存在写入或存储问题。 – 2014-09-05 17:48:57

+6

看起来这些插入的值使用'DateTime.UtcNow.Date' – Zer0 2014-09-05 17:53:22

+0

数据库中的字段类型是datetime。另外,我使用下面的插入参数定义: RegularExpression 2014-09-05 18:01:19

回答

1

在为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的当量)设置为当前日期时间戳条目由于地方设置的默认值。

+0

此问题现已解决。我们发现一个devexpress网格正在更新我们已经忘记的另一个位置的记录。正如Zer0和Michael所建议的那样,它仅使用“日期”进行更新。感谢所有回答这个问题的人。 – RegularExpression 2014-09-06 05:54:35

相关问题