处理 DBnull 异常的最佳方法是什么?
What is the best way to handle a DBnull execption?
我有一些项目返回从数据库中提取的 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 值抛出的异常
- 避免使用
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...
我有一些项目返回从数据库中提取的 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 值抛出的异常
- 避免使用
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...