Я написал эту систему несколько лет назад и не пишу ни одного C# сейчас, поэтому для меня это похоже на ржавый. Я использую приведенный ниже код для записи новой записи. По какой-то причине, @TStamp иногда не написано правильно (SQL Server 12):UtcNow возвращает поврежденную временную метку
Как можно видеть, я получаю нули для временной части по случаю. Часто будет группа записей, происходящих от одного и того же веб-пользователя, но иногда это всего лишь отдельный инцидент. Проблема, безусловно, прерывистая и нечастая.
Мой вопрос: есть ли что-нибудь, что приведет к тому, что 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();
}
Я не понимаю, почему это вернет это. Мне было бы любопытно, какой тип поля для TStamp в базе данных. Также у вас есть образец вставки SQL, который отправляется на сервер. Мне интересно, есть ли проблема с записью или хранением. –
Похоже, что эти вставленные значения используют 'DateTime.UtcNow.Date' – Zer0
Тип поля в базе данных - это дата и время. Кроме того, я использую следующее определение параметра вставки: –
RegularExpression