C#反射獲取數據庫字段

static string sqlselect = "insert into {0}({1}) values ({2})";
(這個方法能夠適用於任何數據庫的插入語句)
        public static int managerRegister<T>(T field) {
            string fieldName = "";
            string fieldList = "";
            string fieldValue = "";
            int k = 0;
            Type tf = typeof(T);
            fieldName = tf.Name;//獲取類型名稱
            PropertyInfo[] pinfo = tf.GetProperties();//獲取屬性
            string[] paraList = new string[pinfo.Length];//參數化查詢字段的數組
            List<SqlParameter> para = new List<SqlParameter>();//用於放置參數化查詢
            foreach (PropertyInfo p in pinfo)
            {
                fieldList += p.Name + ",";
                fieldValue += "'" + p.GetValue(field).ToString() + "'" + ",";
                paraList[k] = p.Name;
                para.Add(new SqlParameter("@" + paraList[k], fieldValue));
                k = k + 1;//當循環執行時k加一使得數組可以連續獲取到字段
            }
            fieldList = fieldList.Substring(0, fieldList.Length - 1);//去除最後一個逗號
            fieldValue = fieldValue.Substring(0, fieldValue.Length - 1);
            sqlselect = string.Format(sqlselect, fieldName, fieldList, fieldValue);
            int value = DBhelper.ExcuteQuery(sqlselect, para.ToArray());//調用本身寫的一個數據庫插入語句並返回一個值
            return value;//返回插入語句的狀況
        }
如下是個人數據庫字段
 

下面是個人插入語句html

public static int ExcuteQuery(string sql, SqlParameter[] para) {
            int value;
            SqlCommand cmd = SqlCmd(sql);
            cmd.Parameters.AddRange(para);
            try
            {
                 value = cmd.ExecuteNonQuery();
                 return value;
            }
            catch
            {
                return -1;
            }           
        }

下面是調用界面sql

protected void Btn_Save_Click(object sender, EventArgs e)
        {
            Bc_Login a = new Bc_Login() { username = txt_Username.Text, pwd = txt_Repassword.Text };
            if (txt_Password.Text != "" && txt_Username.Text != "" && txt_Repassword.Text != "")
            {
                int value = ManagerRegister.managerRegister<Bc_Login>(a);
                if (value > 0)
                {
                    Response.Write("<script>alert(\"註冊成功!\")</script>");
                    Response.Redirect("index.aspx");
                }
                else
                {
                    Response.Write("<script>alert(\"註冊失敗!請檢查用戶名或密碼後重試!\")</script>");
                }
            }
            else {
                Response.Write("<script>alert(\"請檢查用戶名或密碼!\")</script>");
            }
        }

插入頁面的效果數據庫

反射得到字段,實際上是浪費資源性能的作法,可是有些時候爲了少寫代碼,仍是會用到反射,這只是個最基礎的例子,數組

別看界面作的好看,可是內部仍是挺亂的,最後補充反射的原理性能

在運行狀態中,對於任意一個類,都可以獲取到這個類的全部屬性和方法,對於任意一個對象,都可以調用它的任意一個方法和屬性(包括私有的方法和屬性),這種動態獲取的信息以及動態調用對象的方法的功能就稱爲反射機制。通俗點講,經過反射,類對咱們來講是徹底透明的,想要獲取任何東西均可以。spa

對於反射說明我隨機挑選了一個不錯的例子供你們參考:https://www.cnblogs.com/sxw117886/p/5687590.htmlcode

原做者:幻影星辰orm

反射我前面有一個圖片,一個C#程序運行時是先通過編譯器編譯後通過IL編譯以後到JIT/CLR最後再到二進制能被機器所認識的代碼htm

其實反射是從內存中反向得到assembly對象

其他的之後再補充。

相關文章
相關標籤/搜索