程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 快速構建一個簡單的個人框架系列(3)--FastObject具體實現編碼

快速構建一個簡單的個人框架系列(3)--FastObject具體實現編碼

編輯:關於ASP.NET

前面說了那麼多的不具體的想法和設計,今天我們就一個一個來實現它!

讓我們一起來面對一個一個問題吧!

1.底層分別使用的是什麼操作access數據庫和sqlserver數據庫的?

這個問題本是一個很麻煩的問題,我采用的是SqlHelper和AccessHelper,我也已經忘記了當初是從那 裡下,在這裡感謝原作者和漢化者。

2.你是如何把SqlDataReader和OleDbDataReader轉換為T對象並自動賦值?

對於一個未知的實體類,想要向它的屬性賦值,我用的是反射。

DbDataReader(使用父類能向下兼容)轉換為Object的關鍵代碼:

for (int i = 0; i < reader.FieldCount; i++)
                {
                    PropertyInfo p = obj.GetType().GetProperty (reader.GetName(i));//獲取屬性
                    if (reader.GetValue(i) != DBNull.Value)
                    {
                        p.SetValue(obj, reader.GetValue(i),  null);//屬性賦值
                    }
                }

考慮到具體情況,具體代碼:

//處理轉化reader到object的類,方便隨後轉化為T
class ReaderHelper
    {
        public static object ReaderToObject(DbDataReader reader, object obj)
        {
            //針對CommonObject特別處理
            Type t = obj.GetType();
            if (t.Equals((new CommonObject()).GetType()))
            {
                for (int i = 0; i < reader.FieldCount; i++)
                {
                    PropertyInfo p = obj.GetType().GetProperty("Co"+ (i+1).ToString());
                    if (reader.GetValue(i) != DBNull.Value)
                    {
                        p.SetValue(obj, reader.GetValue(i),  null);
                    }
                }
            }
            else
            {
                for (int i = 0; i < reader.FieldCount; i++)
                {
                    PropertyInfo p = obj.GetType().GetProperty (reader.GetName(i));
                    if (reader.GetValue(i) != DBNull.Value)
                    {
                        p.SetValue(obj, reader.GetValue(i),  null);
                    }
                }
            }
            return obj;
        }
    }

注意:不可回避的是,這裡面是有限制的,也可以算是一個bug吧!需要改進!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved