「パラメータ ?_1 にはデフォルト値はありません。」のエラー対策
ADO.NET で Access のデータを更新したとき、「パラメータ ?_1 にはデフォルト値はありません。」のエラーが起きた。
原因はパラメータ値にnull
を設定していたから。
値を Null にするときは、DBNull.Value
か空文字を設定しなければならない。
var sql = " update EMPLOYEE " + " set PHONENO = ?" + " where EMPNO = ?"; using (var cmd = conn.CreateCommand()) { cmd.Transaction = tran; cmd.CommandType = CommandType.Text; cmd.CommandText = sql; // ★パラメーターに null を設定するとSQL実行時にエラーになる cmd.Parameters.Add("PHONENO", OleDbType.VarChar).Value = null; cmd.Parameters.Add("EMPNO", OleDbType.VarChar).Value = txtEmpNo.Text; // SQL実行 cmd.ExecuteNonQuery(); }
null
ではなくDBNull.Value
とすればエラーは起きなくなる。
cmd.Parameters.Add("PHONENO", OleDbType.VarChar).Value = DBNull.Value;
空文字(string.Empty
)でもいい。
cmd.Parameters.Add("PHONENO", OleDbType.VarChar).Value = string.Empty;
Microsoft Docs のDBNull
クラスの説明に、nullと混同しないようにと説明あり。
null : オブジェクトへの参照がないことを意味する。
DBNull : 初期化されていないバリアントまたは存在しないデータベース列を表す。