0

当我使用从零开始转换为 Int32 的 Enum 中的第一项作为查询参数时,参数值为 null。我通过简单地将第一项设置为 1 来解决它,但我想知道这里到底发生了什么?这个让我摸不着头脑。为什么参数值被视为null,而不是0?

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;
}
4

1 回答 1

1

我不知道这个 api,但它可能是一个错误。在定义参数时尝试传入 FbDbType 枚举。

http://www.firebirdsql.org/dotnetfirebird/documentation/api/1.7/FirebirdSql.Data.Firebird.FbDbType.html

http://www.firebirdsql.org/dotnetfirebird/documentation/api/1.7/FirebirdSql.Data.Firebird.FbParameter.html

另一种选择是尝试逐个添加参数,而不是使用对象数组和 AddRange 方法。

于 2010-05-11T03:31:50.753 回答