我的任务是创建代码,使用数据读取器从数据库中获取数据,我很好奇我可以在下面使用的 3 种方法之间的最佳实践,以从我的数据读取器中转换数据,默认情况下使用一种对象。
internal static RoomType SelectRoomType(int roomTypeID)
{
SqlCommand commRoomTypeSelector = ConnectionManager.MainConnection.CreateCommand();
commRoomTypeSelector.CommandType = CommandType.StoredProcedure;
commRoomTypeSelector.CommandText = "Rooms.asp_RMS_RoomType_Select";
commRoomTypeSelector.Parameters.AddWithValue("RoomTypeID", roomTypeID);
SqlDataReader dreadRoomType = commRoomTypeSelector.ExecuteReader();
if (dreadRoomType.FieldCount != 0)
{
dreadRoomType.Read();
RoomType roomType = new RoomType();
roomType.RoomTypeID = (int)dreadRoomType["RoomTypeID"];
roomType.RoomTypeName = (string)dreadRoomType["RoomType"];
roomType.IsActive = ((string)dreadRoomType["IsActive"]).ToUpper() == "Y";
roomType.LastEditDate = (string)dreadRoomType["LastEditDate"] != string.Empty ? DateTime.Parse((string)dreadRoomType["LastEditDate"]) : DateTime.MinValue;
roomType.LastEditUser = (string)dreadRoomType["LastEditUser"];
dreadRoomType.Close();
return roomType;
}
dreadRoomType.Close();
return null;
}
这里让我感到困惑的是拆箱部分,根据http://msdn.microsoft.com/en-us/library/yz2be5wk.aspx 装箱和拆箱非常昂贵,应该避免。我知道我可以使用
int.Parse(dreadRoomType["RoomTypeID"].ToString())
代替
roomType.RoomTypeID = (int)dreadRoomType["RoomTypeID"];
问题是仍然有方法以比这两种方法更有效的方式转换这些数据,如果没有可能的方法,您更喜欢使用这两种方法中的哪一种。在此先感谢所有帮助和建议都被接受:)