Int32にキャストされたゼロベースの列挙型の最初の項目をクエリパラメーターとして使用すると、パラメーター値がnullになります。最初の項目を値1に設定するだけで回避できましたが、ここで実際に何が起こっているのでしょうか。これは私に頭をかいてもらいます。パラメータ値が0ではなくnullと見なされるのはなぜですか?
Enum LogEventType : int
{
SignIn,
SignInFailure,
SignOut,
...
}
private static DataTable QueryEventLogSession(DateTime start, DateTime stop)
{
DataTable entries = new DataTable();
using (FbConnection conn = new FbConnection(DSN))
{
using (FbDataAdapter adapter = new FbDataAdapter(
"SELECT event_type, event_timestamp, event_details FROM event_log " +
"WHERE event_timestamp BETWEEN @start AND @stop " +
"AND event_type IN (@signIn, @signInFailure, @signOut) " +
"ORDER BY event_timestamp ASC", conn))
{
adapter.SelectCommand.Parameters.AddRange(new Object[] {
new FbParameter("@start", start),
new FbParameter("@stop", stop),
new FbParameter("@signIn", (Int32)LogEventType.SignIn),
new FbParameter("@signInFailure", (Int32)LogEventType.SignInFailure),
new FbParameter("@signOut", (Int32)LogEventType.SignOut)});
Trace.WriteLine(adapter.SelectCommand.CommandText);
foreach (FbParameter p in adapter.SelectCommand.Parameters)
{
Trace.WriteLine(p.Value.ToString());
}
adapter.Fill(entries);
}
}
return entries;
}