/////////////////////////////////// /// <summary> /// 表字段转换为字段实体类 /// </summary> /// <param name="dt"></param> /// <returns></returns> public List <FieldObject> DataTableToFieldObject(DataTable dt) { List <FieldObject> list = new List <FieldObject>(); foreach (DataRow dr in dt.Rows) { /* * "USE {1}; * SELECT * [Sort]=a.colorder, * [Name]=a.name, * [IsPKey]=case when exists(SELECT 1 FROM sysobjects where xtype='PK' and name in ( * SELECT name FROM sysindexes WHERE indid in( * SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid * ))) then 1 else 0 end, * [IsIdentity]=case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then 1 else 0 end, * [Type]=b.name, * [Bytes]=a.length, * [Length]=COLUMNPROPERTY(a.id,a.name,'PRECISION'), * [Digits]=ISNULL(COLUMNPROPERTY(a.id,a.name,'Scale'),0), * [Nullable]= a.isnullable , * [DefValue]=ISNULL(e.text,'') * FROM syscolumns a LEFT JOIN systypes b ON a.xusertype=b.xusertype INNER JOIN sysobjects d ON a.id=d.id * AND d.xtype='U' AND d.name !='dtproperties' LEFT JOIN syscomments e ON a.cdefault=e.id * WHERE d.name='{0}' ORDER BY a.id,a.colorder" */ int sort = 0; int.TryParse(dr["Sort"].ToString(), out sort); string name = dr["Name"].ToString(); int isPKey = 0; int.TryParse(dr["IsPKey"].ToString(), out isPKey); int isIdentity = 0; int.TryParse(dr["IsIdentity"].ToString(), out isIdentity); string type = dr["Type"].ToString(); int bytes = 0; int.TryParse(dr["Bytes"].ToString(), out bytes); int length = 0; int.TryParse(dr["Length"].ToString(), out length); int digits = 0; int.TryParse(dr["Digits"].ToString(), out digits); bool nullable = false; bool.TryParse(dr["Nullable"].ToString(), out nullable); string defValue = dr["DefValue"].ToString(); FieldObject fo = new FieldObject(); fo.Sort = sort; fo.Name = name; //表字段名称:原样 fo.PrimaryKey = (isPKey == 1); fo.Identity = (isIdentity == 1); fo.Type = DbTypeToObType(type); fo.Bytes = bytes; fo.Length = length; fo.Digits = digits; fo.Nullable = nullable; fo.DefaultValue = defValue; // string split = "_"; fo.Alias = (name.Length > 2) ? StringUtil.FristLower(name, split) : name.ToLower(); //(别名:去掉"_",,首字母小写;数据库字段命名最好采用驼峰法) fo.PrivateProp = (name.Length > 2) ? StringUtil.FristLower(name, split) : name.ToLower(); //(私有字段:去掉"_",首字母小写;数据库字段命名最好采用驼峰法) fo.PublicProp = StringUtil.FirstUpper(name, '_'); //(公有属性:去掉'_',首字母大写) fo.Descr = ""; //TODO,增加获取数据字段说明 list.Add(fo); } return(list); }
/////////////////////////////////// /// <summary> /// 表字段转换为字段实体类 /// </summary> /// <param name="dt"></param> /// <returns></returns> public List<FieldObject> DataTableToFieldObject(DataTable dt) { List<FieldObject> list = new List<FieldObject>(); foreach (DataRow dr in dt.Rows) { /* * "USE {1}; * SELECT * [Sort]=a.colorder, * [Name]=a.name, * [IsPKey]=case when exists(SELECT 1 FROM sysobjects where xtype='PK' and name in ( * SELECT name FROM sysindexes WHERE indid in( * SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid * ))) then 1 else 0 end, * [IsIdentity]=case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then 1 else 0 end, * [Type]=b.name, * [Bytes]=a.length, * [Length]=COLUMNPROPERTY(a.id,a.name,'PRECISION'), * [Digits]=ISNULL(COLUMNPROPERTY(a.id,a.name,'Scale'),0), * [Nullable]= a.isnullable , * [DefValue]=ISNULL(e.text,'') * FROM syscolumns a LEFT JOIN systypes b ON a.xusertype=b.xusertype INNER JOIN sysobjects d ON a.id=d.id * AND d.xtype='U' AND d.name !='dtproperties' LEFT JOIN syscomments e ON a.cdefault=e.id * WHERE d.name='{0}' ORDER BY a.id,a.colorder" */ int sort = 0; int.TryParse(dr["Sort"].ToString(), out sort); string name = dr["Name"].ToString(); int isPKey = 0; int.TryParse(dr["IsPKey"].ToString(), out isPKey); int isIdentity = 0; int.TryParse(dr["IsIdentity"].ToString(), out isIdentity); string type = dr["Type"].ToString(); int bytes = 0; int.TryParse(dr["Bytes"].ToString(), out bytes); int length = 0; int.TryParse(dr["Length"].ToString(), out length); int digits = 0; int.TryParse(dr["Digits"].ToString(), out digits); bool nullable = false; bool.TryParse(dr["Nullable"].ToString(), out nullable); string defValue = dr["DefValue"].ToString(); FieldObject fo = new FieldObject(); fo.Sort = sort; fo.Name = name; //表字段名称:原样 fo.PrimaryKey = (isPKey == 1); fo.Identity = (isIdentity == 1); fo.Type = DbTypeToObType(type); fo.Bytes = bytes; fo.Length = length; fo.Digits = digits; fo.Nullable = nullable; fo.DefaultValue = defValue; // string split = "_"; fo.Alias = (name.Length>2) ? StringUtil.FristLower(name, split) : name.ToLower(); //(别名:去掉"_",,首字母小写;数据库字段命名最好采用驼峰法) fo.PrivateProp = (name.Length>2) ? StringUtil.FristLower(name, split) : name.ToLower(); //(私有字段:去掉"_",首字母小写;数据库字段命名最好采用驼峰法) fo.PublicProp = StringUtil.FirstUpper(name, '_'); //(公有属性:去掉'_',首字母大写) fo.Descr = ""; //TODO,增加获取数据字段说明 list.Add(fo); } return list; }