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>"); } }
插入页面的效果
反射获得字段,其实是浪费资源性能的做法,但是有些时候为了少写代码,还是会用到反射,这只是个最基础的例子,
别看界面做的好看,但是内部还是挺乱的,最后补充反射的原理
在运行状态中,对于任意一个类,都能够获取到这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性(包括私有的方法和属性),这种动态获取的信息以及动态调用对象的方法的功能就称为反射机制。通俗点讲,通过反射,类对我们来说是完全透明的,想要获取任何东西都可以。
原作者:幻影星辰
反射我前面有一个图片,一个C#程序运行时是先经过编译器编译后经过IL编译之后到JIT/CLR最后再到二进制能被机器所认识的代码
其实反射是从内存中反向获得assembly!
其余的以后再补充。