c# - 代码审查 - 从 SqlDataReader 检索数据

标签 c# ado.net

我正在检索不同类型的列并在分配类的相应属性之前检查是否为空。对于字符串列,一切都很好。但是,我需要决定如何处理 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/

相关文章:

c# - 是一个静态方法,对于不同的调用使用相同的变量

C# 应用程序 - 我应该使用存储过程还是 ADO.NET 和 C# 编程技术?

c# - Microsoft Entity Framework 和 ADO.NET Entity Framework (.edmx) 是否相同?

c# - 无法加载文件或程序集 GalaSoft.MvvmLight

c# - 我计算智能手机位置的算法 - GPS 和传感器

C#:HttpClient,将多个文件作为 MultipartFormDataContent 上传时的文件上传进度

c# - 如何纠正警告 CS1707?

C#控制浏览器

c# - ADO.Net:检查 IDataRecord 上是否存在字段名称

c# - 从 SqlDataReader 读取 int 值