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

其余的以后再补充。

原文地址:https://www.cnblogs.com/sandaman2019/p/10792556.html

时间: 2024-11-05 12:06:21

C#反射获取数据库字段的相关文章

MSSQL 获取数据库字段类型

1 SELECT 2 col.name AS 列名, 3 typ.name as 数据类型, 4 col.max_length AS 占用字节数, 5 col.precision AS 数字长度, 6 col.scale AS 小数位数, 7 col.is_nullable AS 是否允许非空, 8 col.is_identity AS 是否自增, 9 case when exists 10 ( SELECT 1 11 FROM 12 sys.indexes idx 13 join sys.in

获取数据库字段小技巧

下面写了几条根据数据库表,获取domain中要用的数据字段sql语句. select concat( concat(column_name, concat('=', concat(concat('#{',column_name),'}') ) ),',') from information_schema.`COLUMNS` where table_schema='saas-export' and table_name='ss_company'; 以上sql语句获得的结果如id=#{id}, se

通过反射获取数据库的数据 将其转化为相应类型的数据

反射可以动态获取数据的类型,Type 类可以获取其中的 字段.方法.属性等. 尤其是将字段与属性做区分可以让我们可以获取,自己想获得的.废话不多说上代码. 先将数据导入的类,写下: 1 using System; 2 using UnityEngine; 3 4 namespace ARPGSimpleDemo.Skill 5 { 6 /// <summary> 7 /// 技能数据 8 /// </summary> 9 [Serializable] 10 public class

[多线程系列]unsafe类和反射获取对象字段值速度比较

在分析atomic包的时候看到很多类的静态代码块中使用了一下这个方法(例如AtomicInteger) static { try { valueOffset = unsafe.objectFieldOffset (AtomicInteger.class.getDeclaredField("value")); } catch (Exception ex) { throw new Error(ex); } } 所以对objectFieldOffset方法很好奇,看了注释也没太了解,搜索了相

获取映射注解,查询数据库字段的信息

//通过循环 可以获得 注解中的name值@Column(name="EO_XXX"),本方法获取的是 get方法的注解 Method[] methods= EoOrderMaterielModel.class.getMethods();  Map<String,String> modelColumns=new HashMap<String, String>();  for(Method m:methods){   Annotation ats[]=m.getA

NPOI操作excel——利用反射机制,NPOI读取excel数据准确映射到数据库字段

> 其实需求很明确,就是一大堆不一样的excel,每张excel对应数据库的一张表,我们需要提供用户上传excel,我们解析数据入库的功能实现. 那么,这就涉及到一个问题:我们可以读出excel的表头,但是怎么知道每个表头具体对应数据库里面的字段呢? 博主经过一段时间的思考与构思,想到一法:现在的情况是我们有excel表A,对应数据库表B,但是A与B具体属性字段的映射关系我们不知.那我们是不是可以有一个A到B的映射文件C呢? 我想,说到这,大家就很明了了... 第一步:为每张excel创建一个与

利用反射获取字段并获取值或者设置值

package Reflect; import java.lang.reflect.Field;class User{ public String account; public String password;}class Student extends User{ public int age; public String name; private String sex; public Student() { System.out.println("调用无参构造器创建对象");

ASP获取数据库表名,字段名以及对字段的一些操作

最近,在ASP论坛上看到很多网友问怎么获取数据库表名,字段名以及如何对字段进行删除,增添的操作故写此文. 本人对SQLServer比较熟一些,故以SQLServer为列: <% SET Conn=Server.CreateObject("ADODB.Connection") Conn.Open "Server=IP地址;Provider=sqloledb;Database=库名称;UID=用户名;PWD=密码;" %> 读SqlServer库中的表名:

通过java反射获取任意对象的字段名及字段值

import java.lang.reflect.Field; public class ReflectClass3 { /** * @param args */ public static void main(String[] args) { Person p = new Person(1, "ctl", true, 'c', 2.0f, 2.0, 1L, (short) 1, (byte) 1); p.setId(0); p.setName("张三"); p.s