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