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;//返回插入語句的情況
        }
以下是我的數據庫字段
 
        

下面是我的插入語句

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;
            }           
        }

下面是調用界面

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>");
            }
        }

插入頁面的效果

反射獲得字段,其實是浪費資源性能的做法,但是有些時候為了少寫代碼,還是會用到反射,這只是個最基礎的例子,

別看界面做的好看,但是內部還是挺亂的,最后補充反射的原理

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

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

原作者:幻影星辰

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

其實反射是從內存中反向獲得assembly

其余的以后再補充。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM