我几年前写过这个系统,现在不写任何C#,所以这对我来说有点生疏。我使用下面显示的代码写出一条新记录。出于某种原因,@ TStamp有时不能正确写出(SQL Server 12):
可以看出,我偶尔会在时间部分得到零。通常,会有一组来自同一网络用户的记录,但有时它只是一个孤立的事件。这个问题肯定是间歇性的,很少发生。
我的问题是:是否有任何东西会导致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" />
。 。
存储的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
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 :(得分: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)。