쿼리 매개 변수로 Int32에 대한 0부터 시작하는 Enum 캐스트의 첫 번째 항목을 사용할 때 매개 변수 값은 null입니다. 첫 번째 항목의 값을 1로 설정하여이 문제를 해결했지만 실제로 진행되는 작업이 무엇인지 궁금합니다. 이건 내 머리를 긁적이다. 매개 변수 값이 0 대신 null로 간주되는 이유는 무엇입니까?열거 형 항목 0이 Int32를 사용하여 캐스트 될 때 쿼리 매개 변수 값이 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;
}
int로 캐스트 된 첫 번째 매개 변수는 null이 아니고 0이어야합니다. 이것이 문제가 확실합니까? –
예. 'Trace.WriteLine (p.Value.ToString());'는 SignIn의 NullReferenceException을 던집니다. 예외 대신에 나는 0을 프린트 할 것으로 기대한다. – Timothy
무엇이'FbParameter'인가? 널 (NULL)로 가정합니까? 캐스트를 사용하지 않으면 어떻게 될까요? '(Int32)'에 대한 호출을 제거해보십시오. – shahkalpesh