2013-05-10 65 views
0

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

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 

当我点击保存按钮时,所有其他字段被更新,但日期/时间保持不变。我将它们传递给存储过程时检查了这些值,并且它们与我预期的一样。

回答

2

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

WHERE MeasurementDateTime = @MeasurementDateTime AND 
     MeasurementTypeCode = @MeasurementTypeCode 

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

Where子句选择给定的MeasurementDateTime这些行,然后更新这些行,但您更新的MeasurementDateTime是相同的(显然)。

也许你想2个PARAMS:

,@OriginalMeasurementDateTime smalldatetime 
,@NewMeasurementDateTime smalldatetime 
+0

'+ 1' - 是啊':)'错过了.. – 2013-05-10 02:24:50

+0

我别跟着,你能解释一下吗? – Mathemats 2013-05-10 02:25:38

+0

在我的代码中,我怎么能做到这一点,短的添加另一个文本框与旧值和新值更改为? – Mathemats 2013-05-10 02:34:57

0

我觉得你UPDATE查询可能存在缺陷 -

您正在尝试更新MeasurementDateTime,但你的WHERE子句与同样在寻找记录值,您试图更新MeasurementDateTime,所以你不会更新相同的记录。您将更新没有记录(如果没有记录具有相同的值),或者您将更新OTHER记录。

这可能是你想要做的,但对我来说似乎很奇怪。这似乎更符合逻辑有对以前价值的另一个参数来搜索并更新到新

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