读书人

怎的给表的实体类赋值?

发布时间: 2012-11-05 09:35:12 作者: rapoo

怎样给表的实体类赋值??
因为我是根据一个库随机动态的获取表的表名,所以表的结构也是动态的,这样我怎样给获取的表添加一条数据呢??

[解决办法]
利用反射
[解决办法]

探讨

给个案例看看,谢谢

[解决办法]
既然你连接的数据库是固定的,然后根据参数去获取一个表,每个表的结构确实不同,但是只要获取到这个表了,就可以添加,使用DataTable.NewRow 方法:
创建与该表具有相同架构的新 DataRow。

这样你不用关心表结构了。
[解决办法]
看帖回帖一直是中国人的优良传统!每天回帖即可获得 10 分可用分!


[解决办法]
探讨
能不能根据DataRow和表名,映射到实体类,就是转化成已经赋值的实体类

[解决办法]
学习学习
[解决办法]
sql版块问去

用sql获取表列
[解决办法]
先根据表名 获取表结构 然后拼接插入语句 在执行语句~
[解决办法]
由字符串获取实例,这里假设dt.TableName="DT1";
对应实体是Entities.DT1(命名空间.类名)

DataRow dr=dt.Rows[0]; //
//获取实体类的类型
Type type= Assembly.GetExecutingAssembly().GetType("Entities."+dt.TableName);
//调用带参数的构造获取对象
object obj= Activator.CreateInstance(type, new object[] { dr});

[解决办法]
C# code
        public IEntity GetEntity(IEntity entity)//目前只能根据ID查询        {            try            {                Type type = entity.GetType();                PropertyInfo[] list = type.GetProperties();                string sql = "select top 1 * from " + type.Name + " where ";                foreach (PropertyInfo info in list)                {                    if (info.Name == GetKeyName(type.Name))                    {                        sql += info.Name + "=" + info.GetValue(entity, null);                        break;                    }                }                DataTable dt = Query(sql);                if (dt.Rows.Count > 0)                {                    for (int j = 0; j < list.Length; j++)                    {                        if (list[j].Name == GetKeyName(type.Name) ||                            dt.Rows[0][list[j].Name] is DBNull)                        {                            continue;                        }                        string columnName = list[j].Name;                        object value = dt.Rows[0][columnName];                        list[j].SetValue(entity, value, null);                    }                    return entity;                }                else                {                    return null;                }            }            catch (Exception ex)            {                throw new Exception(ex.Message);            }        }
[解决办法]
探讨
C# code
public IEntity GetEntity(IEntity entity)//目前只能根据ID查询
{
try
{
Type type = entity.GetType();

[解决办法]
public static IList<T> FillList<T>(System.Data.IDataReader reader)
{
IList<T> lst= new List<T>();
while (reader.Read())
{
T RowInstance = Activator.CreateInstance<T>();
foreach (PropertyInfo Property in typeof(T).GetProperties())


{
foreach (BindingFieldAttribute FieldAttr in Property.GetCustomAttributes(typeof(BindingFieldAttribute), true))
{
try
{
int Ordinal = reader.GetOrdinal(FieldAttr.FieldName);
if (reader.GetValue(Ordinal) != DBNull.Value)
{
Property.SetValue(RowInstance, Convert.ChangeType(reader.GetValue(Ordinal), Property.PropertyType), null);
}
}
catch
{
break;
}
}
}
lst.Add(RowInstance);
}
return lst;
}

读书人网 >C#

热点推荐