0

我正在尝试使用 sqldatasource.UpdateParameters.Add() 将日期/时间添加到我的数据库表中。列数据类型是 smalldatetime,它在 gridview 中显示得很好。如果我尝试结束编辑此日期/时间,然后保存更改其他字段更新,但日期/时间保持不变。我尝试使用 DateTime.Parse 方法但没有成功。

sqlds1.UpdateParameters.Add("MeasurementDateTime", Data.DbType.DateTime, currentMsrmntDateTime.Text)

我对每个相应的值和参数对使用上面的代码,但日期/时间字段不会更新。更新语句再次适用于除日期/时间以外的所有参数。

 CREATE PROCEDURE [dbo].[UpdateCathodeTemps]
(
    @MeasurementTypeCode int
    ,@MeasurementDateTime smalldatetime
    ,@Value nvarchar(50)
    ,@Comments nvarchar(512)
    ,@IsMeasurementChecked bit
    ,@MeasurementCheckedBy nvarchar(50)
    ,@BakeDetailsID int
    -- 7 Params
) AS



BEGIN TRANSACTION

UPDATE tblMeasurementsAtPeriod
SET MeasurementDateTime =  @MeasurementDateTime, 
Value = @Value, 
Comments = @Comments, 
MeasurementCheckedBy = @MeasurementCheckedBy, 
IsMeasurementChecked = @IsMeasurementChecked, 
MeasurementTypeCode = @MeasurementTypeCode, 
BakeDetailsID = @BakeDetailsID  
WHERE MeasurementDateTime = @MeasurementDateTime AND MeasurementTypeCode = @MeasurementTypeCode


IF @@ERROR <> 0
BEGIN
    ROLLBACK
    RETURN
END



COMMIT

当我点击保存按钮时没有抛出错误,所有其他字段都更新了,但日期/时间保持不变。我检查了传递给存储过程的值,它们与我预期的一样。

4

2 回答 2

2

这是WHERE存储过程子句中的问题:

WHERE MeasurementDateTime = @MeasurementDateTime AND 
      MeasurementTypeCode = @MeasurementTypeCode

所以你更新到完全相同的日期!

where 子句使用给定的 选择那些行MeasurementDateTime,然后更新这些行,但MeasurementDateTime要更新到的行是相同的(显然)。

也许你想要 2 个参数:

,@OriginalMeasurementDateTime smalldatetime
,@NewMeasurementDateTime smalldatetime
于 2013-05-10T02:23:40.670 回答
0

我认为您的 UPDATE 查询可能有缺陷-

您正在尝试更新 MeasurementDateTime,但您的 WHERE 子句正在查找与您尝试更新的值相同的MeasurementDateTime记录,因此您不会更新相同的记录。您将不更新任何记录(如果没有记录具有相同的值),或者您将更新其他记录。

这可能是你想要做的,但对我来说似乎很奇怪。为先前的值设置另一个参数来搜索并将它们更新为值似乎更合乎逻辑:

UPDATE tblMeasurementsAtPeriod
SET MeasurementDateTime =  @NewMeasurementDateTime, /* NEW date value */
    Value = @Value, 
    Comments = @Comments, 
    MeasurementCheckedBy = @MeasurementCheckedBy, 
    IsMeasurementChecked = @IsMeasurementChecked, 
    MeasurementTypeCode = @MeasurementTypeCode, 
    BakeDetailsID = @BakeDetailsID  
    WHERE MeasurementDateTime = @OldMeasurementDateTime /* OLD date value */
      AND MeasurementTypeCode = @MeasurementTypeCode
于 2013-05-10T02:25:14.000 回答