|
分類:[C#]
UPDATEのSQLが通らず、アドバイスを頂けると幸いです。
SaveでINSERTとUPDATEを設定します。 ExecuteProcessでUPDATE文から実行し、更新結果が0行ならINSERTを実行します。 このプログラムのUPDATEが通らずに更新結果0行となり、INSERTまで進んでしまいます。
SELECT文で読み出せるか試したところ、WHERE条件にProcessId AND CreateDate AND SerialNumber だと読み出します。 しかし、CreateDate もしくは SerialNumber のみを条件にすると読み出せません。
パラメータの設定にクセがあるような感じはしてきているのですが、 ACCESSを操作する際の何か注意事項等あれば教えていただきたいです。
Processテーブル ProcessId:数値型 CreateDate:日付/時刻型 SerialNumber:短いテキスト StaffName:短いテキスト Terminal:短いテキスト CompleteDate:日付/時刻型
public void Save(ProcessEntity process) { string insert = @" INSERT INTO Process (ProcessId,CreateDate,SerialNumber,StaffName,Terminal,CompleteDate) VALUES (?,?,?,?,?,?) "; string update = @" UPDATE Process SET CreateDate = ?, SerialNumber = ?, StaffName = ?, Terminal = ?, CompleteDate = ? WHERE ProcessId = ? AND CreateDate = ? AND SerialNumber = ? ";
var createDate = new OdbcParameter("@CreateDate", OdbcType.DateTime); //←型を明示してみてもダメ createDate.Value = process.CreateDate.Value;
var serialNumber= new OdbcParameter("@SerialNumber", OdbcType.VarChar); serialNumber.Value = process.SerialNumber.Str;
var args = new List<OdbcParameter> { new OdbcParameter("@ProcessId",process.ProcessId.Value), createDate, new OdbcParameter("@SerialNumber",process.SerialNumber.Str), new OdbcParameter("@StaffName",process.StaffName.Str), new OdbcParameter("@Terminal",process.Terminal), new OdbcParameter("@CompleteDate",process.CompleteDate.Value), }; OdbcHelper.ExecuteProcess(insert, update, args.ToArray()); }
internal static void ExecuteProcess(string insert, string update, OdbcParameter[] paramaters) { using (var connection = new OdbcConnection(ProcessConnection)) using (var command = new OdbcCommand(update, connection)) { connection.Open(); if (paramaters != null) { command.Parameters.AddRange(paramaters); } if (command.ExecuteNonQuery() < 1) { command.CommandText = insert; command.ExecuteNonQuery(); } } }
|