【问题标题】:What is the best way to handle a DBnull execption? [duplicate]处理 DBnull 异常的最佳方法是什么? [复制]
【发布时间】:2019-07-16 21:32:42
【问题描述】:

我有一些从引发异常的数据库中返回 DBnull 的项目。处理异常的最佳方法是什么?更具体地适用于 Daily 和 EndDate。 Daily 是 sql 中的位数据类型,EndDate 是 DateTime。这是我当前实现代码的方式。

while (reader.Read())
                {
                    sessionInfo.ID = sessionId;
                    sessionInfo.Name = Convert.ToString(reader["Name"]);
                    sessionInfo.GroupID = Convert.ToString(reader["GroupId"]);
                    sessionInfo.Disabled = Convert.ToBoolean(reader["IsDisabled"]);
                    sessionInfo.IsTestSession = Convert.ToBoolean(reader["IsTestSession"]);
                    sessionInfo.NextTrigger = reader["NextExecutionTime"] == DBNull.Value ? null : (DateTime?)reader["NextExecutionTime"];
                    sessionInfo.Type = Convert.ToString(reader["SType"]);
                    sessionInfo.POKeepDays = Convert.ToInt32(reader["DaysToKeep"]);
                    sessionInfo.When = new SchedulerInfo()
                    {
                        ID = sessionId,
                        SessionID = sessionId,
                        //TODO Recurrence = 
                        //TODO MultiTriggerTimes
                        //TODO MultiTriggerColl                          
                        MinuteFreq = Convert.ToString(reader["MinuteFreq"]),
                        HourFreq = Convert.ToString(reader["HourFreq"]),
                        Daily = reader.GetBoolean(reader.GetOrdinal("Daily")),
                        WeekFreq = Convert.ToString(reader["WeekFreq"]),
                        StartDate = Convert.ToDateTime(reader["StartDate"]),
                        EndDate = Convert.ToDateTime(reader["EndDate"]),
                        NoOrderDays = Convert.ToString(reader["NoOrderDays"]),
                        OrderDays = Convert.ToString(reader["OrderDays"]),
                        SelectedHolidays = Convert.ToString(reader["NoOrderHoliday"]),
                        SelectedOrderHolidays = Convert.ToString(reader["HolidayName"]),

我希望学习如何最好地处理为 BdNull 值引发的异常

【问题讨论】:

    标签: c# sql asp.net-core asp.net-web-api ado


    【解决方案1】:
    • 避免使用Convert.ToFoo,而是直接在DataReader 上使用GetFoo 方法。
    • 如果您首先使用DataReader.IsDBNull(),那么您首先不会收到与DBNull 相关的异常。

    像这样:

    while (reader.Read())
    {
        sessionInfo.ID = sessionId;
        sessionInfo.Name = reader.IsDBNull( "Name" ) ? null : reader.GetString( "Name" );
        sessionInfo.GroupId = reader.IsDBNull( "GroupId" ) ? null : reader.GetString( "GroupId" );
        sessionInfo.Disabled = reader.IsDBNull( "Disabled" ) ? false : reader.GetBoolean( "Disabled" );
        // etc...
    

    【讨论】:

    • EndDate 非常好用,现在我遇到了 Daily 的问题。 Daily = reader.IsDBNull("Daily") ? false : reader.GetBoolean( "Daily" ), 它在参数中寻找一个 INT 而不是一个字符串值。
    • @JadenAdams 将GetOrdinal 的结果传递给IsDBNullGetBoolean。在第一次调用 reader.Read() 之前,您可能希望将其存储在中间 int 变量中。
    猜你喜欢
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 2011-04-29
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多