我正在尝试使用sqldatasource.UpdateParameters.Add()向我的数据库表添加日期/时间。 列数据类型是smalldatetime,它在gridview中显示就好了。如果我尝试结束编辑此日期/时间,则保存其他字段更新的更改,但日期/时间保持不变。我尝试过使用DateTime.Parse方法但没有成功。
sqlds1.UpdateParameters.Add("MeasurementDateTime", Data.DbType.DateTime, currentMsrmntDateTime.Text)
我对每个相应的值和参数对使用上面的代码,但是日期/时间字段不会更新。 update语句再次适用于除日期/时间之外的所有参数。
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
当我点击保存按钮时没有抛出任何错误,所有其他字段都会更新,但日期/时间保持不变。我已经检查了值,因为它们被传递给存储过程,它们正如我所料。
答案 0 :(得分:2)
以下是存储过程的WHERE
子句中的问题:
WHERE MeasurementDateTime = @MeasurementDateTime AND
MeasurementTypeCode = @MeasurementTypeCode
所以你要更新到完全相同的日期!
where子句选择具有给定MeasurementDateTime
的行,然后更新这些行,但您要更新的MeasurementDateTime
是相同的(显然)。
也许你想要2个参数:
,@OriginalMeasurementDateTime smalldatetime
,@NewMeasurementDateTime smalldatetime
答案 1 :(得分:0)
我认为您的UPDATE查询可能存在缺陷 -
您正在尝试更新 MeasurementDateTime
,但您的WHERE子句正在查找与您尝试更新MeasurementDateTime
的值相同的记录,因此您赢了“要更新相同的记录。您将更新没有记录(如果没有记录具有相同的值),或者您将更新其他记录。
这可能是你想要做的,但对我来说这似乎很奇怪。为之前的值设置另一个参数来搜索并将其更新为 new 值似乎更合乎逻辑:
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