Jianchidaodi
面朝大海,春暖花开

简介

SqlDataReader是.net中提供的一种快速的从数据库读取只进的行流的方式,它提供了很多方法读取数据库的值,它们都有一个统一的形式:GetXXX(int i)其中i为从零开始的列序号,例如:GetChars(int i), GetDouble(int i)等,但是这样比较容易出错,当然如果你对数据库里面的字段了如指掌,知道每一个字段的属性,这样肯定不会有错,但是如果你万一记错了,或者你的表里面增加或者减少了字段,那么程序就的改好几个地方了,对吧,所以这里封装了一个更智能的SqlDataReader。
当然其关键地方就是利用:int i GetOrdinal(string column)得到column在表中的位置。

部分代码如下,如果需要可以把每一个利用位置来访问的函数封装成利用例名来访问:
public sealed class SmartDataReader
{
        private DateTime defaultDate;
        public SmartDataReader(SqlDataReader reader)
        {
                this.defaultDate = DateTime.MinValue;
                this.reader = reader;
        }
 
        public int GetInt32(String column)
        {
            int data = (reader.IsDBNull(reader.GetOrdinal(column)))
                                                          ? (int)0 : (int)reader[column];
            return data;
        }
     
        public short GetInt16(String column)
        {
            short data = (reader.IsDBNull(reader.GetOrdinal(column)))
                                                    ? (short)0 : (short)reader[column];
            return data;
        }
 
        public float GetFloat(String column)
        {
              float data = (reader.IsDBNull(reader.GetOrdinal(column)))
                                        ? 0 : float.Parse(reader[column].ToString());
              return data;
        }
 
        public bool GetBoolean(String column)
        {
            bool data = (reader.IsDBNull(reader.GetOrdinal(column)))
                                                        ? false : (bool)reader[column];
            return data;
        }
 
        public String GetString(String column)
        {
            String data = (reader.IsDBNull(reader.GetOrdinal(column)))
                                                ? null : reader[column].ToString();
            return data;
        }
 
        public DateTime GetDateTime(String column)
        {
            DateTime data = (reader.IsDBNull(reader.GetOrdinal(column)))
                                            ? defaultDate : (DateTime)reader[column];
            return data;
        }
 
        public bool Read()
        {
            return this.reader.Read();
        }
        private SqlDataReader reader;
}

posted on 2006-04-29 22:09  Jianchidaodi  阅读(1021)  评论(0)    收藏  举报