0

sqldatasource.UpdateParameters.Add() を使用して、データベース テーブルに日付/時刻を追加しようとしています。列のデータ型は smalldatetime で、グリッドビューに問題なく表示されています。この日付/時刻の編集を終了しようとすると、変更を保存して他のフィールドが更新されますが、日付/時刻は同じままです。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

保存ボタンを押してもエラーは発生せず、他のすべてのフィールドが更新されますが、日付/時刻は変わりません。値がストアド プロシージャに渡されるときに値を確認しましたが、期待どおりです。

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、同じレコードを更新することはできません。レコードを更新しないか (同じ値を持つレコードがない場合)、または 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
于 2013-05-10T02:25:14.000 に答える