我正在检索不同类型的列并在分配类的相应属性之前检查是否为空。对于字符串列,一切都很好。但是,我需要决定如何处理 DateTime、Bool 和 Enum 类型?
a) 我应该为 A 类使用可为 null 的 DateTime 属性还是有更好的做法?
b) 在下面的代码中检查枚举和 bool 值是否正确,或者有更好的方法吗?
public static List<ClassA> Select(string connectionString)
{
List<ClassA> ClassAList = new List<ClassA>();
using (SqlConnection con = new SqlConnection(connectionString))
{
con.Open();
using (SqlCommand command = new SqlCommand(SPROC_ClassA_Select, con))
{
using (SqlDataReader reader = command.ExecuteReader())
{
int MyGuidOrdinal = reader.GetOrdinal("MyGuid") ;
int MyStringOrdinal = reader.GetOrdinal("MyString") ;
int MyDateTimeOrdinal = reader.GetOrdinal("MyDateTime") ;
int MyBooleanOrdinal = reader.GetOrdinal("MyBoolean") ;
int MyEnumValueOrdinal = reader.GetOrdinal("MyEnumValue") ;
if(reader.HasRows)
{
while (reader.Read())
{
ClassA classA = new ClassA
{
MyGuid = reader.GetGuid(MyGuidOrdinal),
MyString = reader["MyString"] is DBNull ? null : reader.GetString(MyStringOrdinal),
MyDateTime = reader["MyDateTime"] is DBNull ? DateTime.MinValue : reader.GetDateTime(MyDateTimeOrdinal),
MyBoolean = reader["MyBoolean"] is DBNull ? false : reader.GetBoolean(MyBooleanOrdinal),
MyEnumValue = reader["MyEnumValue"] is DBNull ? (int)MyEnumValue.Value1 : reader.GetInt32(MyEnumValueOrdinal),
};
ClassAList.Add(classA);
}
}
return ClassAList;
}
}
}
下面是枚举:-
public enum MyEnumValue
{
value1 =1,
value2
}
最佳答案
如果您希望您的类能够正确维护数据库值而不会丢失,您应该为 bool 值、日期值和可能的枚举值使用可空类型。否则,如果您将数据发送回数据库,则可能会在更新数据时将所有空值更改为默认值。
此外,如果您使用类似 reader.IsDBNull() 的方法来检查空值,代码会不会好一点?
关于c# - 代码审查 - 从 SqlDataReader 检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3117551/