0

少量のデータをMSAccess2003データベースにプッシュする必要があるASP.NETページがあります。このプロセスでは、1つのレコードを選択し、1つの新しいレコードを挿入し、1つのレコードを更新する必要があります。接続を介してAccessデータベースに接続していOleDbConnectionます。これまでのところ、選択機能と挿入機能は期待どおりに機能しています(接続が良好であることがわかります)。ただし、更新では行の更新に失敗します。レコードを更新する関数は次のようになります。

public static int UpdateDeviceDates(int deviceId, DateTime nextTestDate)
{
    var conn = DbConnect.AccessConnection();
    var sqlString = WebConfigurationManager.AppSettings["UpdateDeviceDates"];
    using (var cmd = new OleDbCommand(sqlString, conn))
    {
        cmd.Parameters.AddWithValue("@DeviceID", deviceId);
        cmd.Parameters.AddWithValue("@NextTestDate", nextTestDate);
        cmd.CommandType = CommandType.Text;
        conn.Open();
        var result = cmd.ExecuteNonQuery();
        return result;
    }
}

web.configファイルからプルバックされたsqlStringは、次のようになります。

UPDATE tblDevice 
SET tblDevice.NextTestDate = @nextTestDate, 
    tblDevice.FirstNoticeDate = Null, 
    tblDevice.SecondNoticeDate = Null 
WHERE DeviceID=@deviceId;

このクエリは、新しいAccessクエリウィンドウに貼り付けて実行を押すと正常に機能するため、構文が正しいことがわかります。私はかなりのテストを行い、それ@nextTestDateが失敗の原因となっているのはフィールドであることがわかりました。SQL文字列からそれを取り出したとき、期待どおりにレコードが更新されました。Insert関数に渡す日付は問題なく機能するため、これは当惑させられます。

私はかなり周りを見回しましたが、答えに最も近いのは「aspxの日付をMS-ACCESSテーブルに更新できません」でした。主な答えは、パラメータをに変更することでしたShortDateString。私はそれを効果がないように試しました。#Accessが独自のクエリで行うのは、日付をで囲むことも提案されました。残念ながら、それもうまくいきませんでした。

日付はInsertステートメントとまったく同じ形式で送信され、正常に機能するため、これらのいずれかが必要な理由はわかりません。そのクエリを機能させるために私が見つけた唯一のことは、日付パラメータを削除することです(これはクエリの主な目的を無効にするでしょう)ので、私はここで私の知恵の終わりにいます。

4

1 に答える 1

1

クエリでは、パラメータの順序が異なります。順序は次のように一致する必要があります。

    cmd.Parameters.AddWithValue("@NextTestDate", nextTestDate);     
    cmd.Parameters.AddWithValue("@DeviceID", deviceId);

合わせる:

UPDATE tblDevice 
SET tblDevice.NextTestDate = @nextTestDate, <--- Param 1
    tblDevice.FirstNoticeDate = Null, 
    tblDevice.SecondNoticeDate = Null 
WHERE DeviceID=@deviceId;                   <--- Param 2
于 2013-03-26T17:32:35.030 に答える