定义属性
using System; /// <summary> /// 忽视实体类属性 /// </summary> public class IgnoreAttribute : Attribute { }
using System; /// <summary> /// 主键属性 /// </summary> public class KeyAttribute : Attribute { /// <summary> /// 是否自增长 /// true自增长 false非自增长 /// 只限定int类型 /// </summary> public bool Identity { get; set; } }
using System; /// <summary> /// 字符串长度属性 /// </summary> public class StringLengthAttribute : Attribute { /// <summary> /// 长度大小 /// </summary> public int Length { get; set; } }
using System; /// <summary> /// 表名属性 /// </summary> public class TableNameAttribute : Attribute { /// <summary> /// 表名 /// </summary> public string Name { get; private set; } public TableNameAttribute(string name) { Name = name; } }
自定义扩展方法
using System; using System.Collections.Generic; using System.Linq; using System.Web; /// <summary> /// 扩展类 /// </summary> public static class Ext { /// <summary> /// 对象转字符串 /// </summary> /// <param name="obj"></param> /// <returns></returns> public static string AsString(this object obj) { if (obj == null) return string.Empty; return obj.ToString(); } /// <summary> /// 对象转整数 /// </summary> /// <param name="obj"></param> /// <returns></returns> public static int AsInt(this object obj) { int o; int.TryParse(obj.AsString(), out o); return o; } /// <summary> /// 对象转可为空的整数 /// </summary> /// <param name="obj"></param> /// <returns></returns> public static int? AsNullInt(this object obj) { if (string.IsNullOrEmpty(obj.AsString())) { return null; } int o; int.TryParse(obj.AsString(), out o); return o; } /// <summary> /// 对象转日期 /// </summary> /// <param name="obj"></param> /// <returns></returns> public static DateTime AsDateTime(this object obj) { DateTime o; DateTime.TryParse(obj.AsString(), out o); return o; } /// <summary> /// 对象转浮点数 /// </summary> /// <param name="obj"></param> /// <returns></returns> public static double AsDouble(this object obj) { double o; double.TryParse(obj.AsString(), out o); return o; } /// <summary> /// 对象转十进制数 /// </summary> /// <param name="obj"></param> /// <returns></returns> public static decimal AsDecimal(this object obj) { decimal o; decimal.TryParse(obj.AsString(), out o); return o; } /// <summary> /// 对象转可为空的日期 /// </summary> /// <param name="obj"></param> /// <returns></returns> public static DateTime? AsNullDateTime(this object obj) { if (string.IsNullOrEmpty(obj.AsString())) { return null; } DateTime o; DateTime.TryParse(obj.AsString(), out o); return o; } /// <summary> /// StringBuilder的扩展函数 /// </summary> /// <param name="sb"></param> /// <param name="val"></param> public static void AppendAnd(this System.Text.StringBuilder sb,string val) { if (sb.Length > 0) sb.Append(" AND "); sb.Append(val); } }
操作数据库的类
using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Linq; using System.Reflection; using System.Text; using System.Web; namespace jsyjglxt.Utils { /// <summary> /// 操作数据库的类 /// </summary> public class SqlFactoryUtil { /// <summary> /// 字段开始字符 /// </summary> public string QuotePrefix { get; set; } /// <summary> /// 字段结尾字符 /// </summary> public string QuoteSuffix { get; set; } /// <summary> /// 架构分隔符 /// </summary> public string SchemaSeparator { get; set; } /// <summary> /// 参数前缀 /// </summary> public string ParameterPrefix { get; set; } IDbConnection dbConnection; IDbTransaction dbTransaction; /// <summary> /// 链接字符串 /// </summary> public string ConStr { get; private set; } /// <summary> /// 共有者 /// </summary> public string ProviderName { get; private set; } /// <summary> /// 构造函数,默认读取数据库连接defaultDb的节点配置 /// </summary> public SqlFactoryUtil() { ParameterPrefix = "@"; QuotePrefix = "["; QuoteSuffix = "]"; SchemaSeparator = "."; //取数据库链接 ConStr = ConfigurationManager.ConnectionStrings["defaultDb"].ConnectionString; //取ProviderName ProviderName = ConfigurationManager.ConnectionStrings["defaultDb"].ProviderName; } /// <summary> /// 构造函数 /// </summary> /// <param name="configName">配置数据库连接的节点名</param> public SqlFactoryUtil(string configName) { ParameterPrefix = "@"; QuotePrefix = "["; QuoteSuffix = "]"; SchemaSeparator = "."; //取数据库链接 ConStr = ConfigurationManager.ConnectionStrings[configName].ConnectionString; //取ProviderName ProviderName = ConfigurationManager.ConnectionStrings[configName].ProviderName; } /// <summary> /// 开始事务 /// </summary> public void BeginTransaction() { dbConnection = CreateConnection(); dbTransaction = dbConnection.BeginTransaction(); } /// <summary> /// 提交事务 /// </summary> public void Commit() { try { dbTransaction.Commit(); } finally { dbConnection = null; dbTransaction = null; } } /// <summary> /// 回滚事务 /// </summary> public void Rollback() { try { dbTransaction.Rollback(); } finally { dbConnection = null; dbTransaction = null; } } /// <summary> /// 创建Connection /// </summary> /// <returns></returns> public IDbConnection CreateConnection() { if (dbConnection == null) { var con = System.Data.Common.DbProviderFactories.GetFactory(ProviderName).CreateConnection(); con.ConnectionString = ConStr; con.Open(); return con; } else { return dbConnection; } } /// <summary> /// 创建DataAdapter /// </summary> /// <returns></returns> public IDbDataAdapter CreateDataAdapter() { var dapt = System.Data.Common.DbProviderFactories.GetFactory(ProviderName).CreateDataAdapter(); return dapt; } /// <summary> /// 创建Command /// </summary> /// <returns></returns> public IDbCommand CreateCommand() { var cmd = System.Data.Common.DbProviderFactories.GetFactory(ProviderName).CreateCommand(); return cmd; } /// <summary> /// 创建CommandBuilder /// </summary> /// <returns></returns> public System.Data.Common.DbCommandBuilder CreateCommandBuilder() { var builder = System.Data.Common.DbProviderFactories.GetFactory(ProviderName).CreateCommandBuilder(); builder.QuotePrefix = QuotePrefix; builder.QuoteSuffix = QuoteSuffix; builder.SchemaSeparator = SchemaSeparator; return builder; } /// <summary> /// 创建参数 /// </summary> /// <param name="pName"></param> /// <param name="pVal"></param> /// <returns></returns> public IDbDataParameter CreateParameter(string pName, object pVal) { //实例化参数 var pp = System.Data.Common.DbProviderFactories.GetFactory(ProviderName).CreateParameter(); //设置参数名 if (pName.Contains(ParameterPrefix)) { pp.ParameterName = pName; } else { pp.ParameterName = ParameterPrefix + pName; } //设置参数值 pp.Value = pVal; //返回参数对象 return pp; } /// <summary> /// 执行SQL语句 /// </summary> /// <param name="sql">sql语句</param> /// <returns></returns> public int ExecuteSql(string sql) { return ExecuteSql(sql, null); } /// <summary> /// 执行SQL语句 /// </summary> /// <param name="sql">sql语句</param> /// <param name="parameters">参数</param> /// <returns></returns> public int ExecuteSql(string sql,IDbDataParameter[] parameters) { return ExecuteSql(sql, CommandType.Text, parameters); } /// <summary> /// 执行SQL语句 /// </summary> /// <param name="sql">sql语句</param> /// <param name="commandType">命令类别</param> /// <param name="parameters">参数</param> /// <returns></returns> public int ExecuteSql(string sql,CommandType commandType, IDbDataParameter[] parameters) { //创建数据库链接 using(var con = CreateConnection()) { //创建SQL命令 var cmd = con.CreateCommand(); cmd.CommandText = sql; cmd.CommandType = commandType; if (dbTransaction != null) cmd.Transaction = dbTransaction; //设置参数 if (parameters != null && parameters.Length > 0) { foreach (var p in parameters) { cmd.Parameters.Add(p); } } //执行SQL语句并返回影响的行数 return cmd.ExecuteNonQuery(); } } /// <summary> /// 执行查询并返回第一行第一列 /// </summary> /// <param name="sql">sql语句</param> /// <returns></returns> public object ExecuteScalar(string sql) { return ExecuteScalar(sql, null); } /// <summary> /// 执行查询并返回第一行第一列 /// </summary> /// <param name="sql">sql语句</param> /// <param name="parameters">参数</param> /// <returns></returns> public object ExecuteScalar(string sql, IDbDataParameter[] parameters) { return ExecuteScalar(sql, CommandType.Text, parameters); } /// <summary> /// 执行查询并返回第一行第一列 /// </summary> /// <param name="sql">sql语句</param> /// <param name="commandType">命令类别</param> /// <param name="parameters">参数</param> /// <returns></returns> public object ExecuteScalar(string sql, CommandType commandType, IDbDataParameter[] parameters) { //创建数据库链接 using (var con = CreateConnection()) { //创建命令 var cmd = con.CreateCommand(); cmd.CommandText = sql; cmd.CommandType = commandType; if (dbTransaction != null) cmd.Transaction = dbTransaction; //设置参数 if (parameters != null && parameters.Length > 0) { foreach (var p in parameters) { cmd.Parameters.Add(p); } } //返回第一行第一列的值 return cmd.ExecuteScalar(); } } /// <summary> /// 执行查询并返回数据集 /// </summary> /// <param name="sql">sql语句</param> /// <returns></returns> public DataSet QueryDataSet(string sql) { return QueryDataSet(sql, null); } /// <summary> /// 执行查询并返回数据集 /// </summary> /// <param name="sql">sql语句</param> /// <param name="parameters">参数</param> /// <returns></returns> public DataSet QueryDataSet(string sql, IDbDataParameter[] parameters) { return QueryDataSet(sql, CommandType.Text, parameters); } /// <summary> /// 执行查询并返回数据集 /// </summary> /// <param name="sql">sql语句</param> /// <param name="commandType">命令类别</param> /// <param name="parameters">参数</param> /// <returns></returns> public DataSet QueryDataSet(string sql, CommandType commandType, IDbDataParameter[] parameters) { //创建数据库链接 using (var con = CreateConnection()) { //创建SQL命令 var cmd = con.CreateCommand(); cmd.CommandText = sql; cmd.CommandType = commandType; if (dbTransaction != null) cmd.Transaction = dbTransaction; //设置参数 if (parameters != null && parameters.Length > 0) { foreach (var p in parameters) { cmd.Parameters.Add(p); } } //查询数据库并将数据返回到数据集 var dapt = CreateDataAdapter(); dapt.SelectCommand = cmd; DataSet ds = new DataSet(); dapt.Fill(ds); //返回数据集 return ds; } } /// <summary> /// 查询数据库 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="sql"></param> /// <param name="parms"></param> /// <returns></returns> public List<T> Query<T>(string sql, System.Data.IDbDataParameter[] parms = null) where T : class, new() { //查询数据 DataTable table = QueryDataSet(sql, parms).Tables[0]; //如果没有数据则返回空记录 if (table == null || table.Rows.Count <= 0) { return new List<T>(); } //定义变量集合 var dataList = new List<T>(); //获取属性 PropertyInfo[] propertyInfos = typeof(T).GetProperties(); foreach (DataRow row in table.Rows) { T t = new T(); //循环属性 foreach (PropertyInfo propertyInfo in propertyInfos) { //过滤Ignore属性 int count = propertyInfo.GetCustomAttributes(false).Where(a => a is IgnoreAttribute).Count(); if (count > 0) { continue; } //数据库为空时 if (row[propertyInfo.Name] == DBNull.Value) { propertyInfo.SetValue(t, null, null); } else { //否则直接赋值 propertyInfo.SetValue(t, row[propertyInfo.Name], null); } } //添加数据到集合 dataList.Add(t); } //返回列表 return dataList; } /// <summary> /// 插入数据 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="con"></param> /// <param name="t"></param> /// <param name="trans"></param> /// <returns></returns> public int Insert<T>(T t) where T : class, new() { //创建数据库链接 var con = CreateConnection(); //获取属性集合 PropertyInfo[] propertyInfos = typeof(T).GetProperties(); //获取表名 string tblName = typeof(T).Name; var tblAttr = typeof(T).GetCustomAttributes(false).Where(a => a is TableNameAttribute).FirstOrDefault(); if (tblAttr != null) { tblName = (tblAttr as TableNameAttribute).Name; } //判断实体类中是否设置主键 int keyCount = 0; foreach (PropertyInfo propertyInfo in propertyInfos) { int count = propertyInfo.GetCustomAttributes(false).Where(a => a is KeyAttribute).Count(); if (count <= 0) { continue; } keyCount++; } //如果未设置主键,则异常 if (keyCount <= 0) { throw new Exception("实体未设置KeyAttribute属性"); } //查询数据库 DataSet ds = new DataSet(); var cmd = con.CreateCommand(); cmd.CommandText = "select * from " + tblName + " where 1<>1"; cmd.CommandType = CommandType.Text; if (dbTransaction != null) cmd.Transaction = dbTransaction; var dapt = CreateDataAdapter(); dapt.SelectCommand = cmd; dapt.Fill(ds); //在查询的数据集中新增记录 DataRow row = ds.Tables[0].NewRow(); //设置新增行的值 foreach (PropertyInfo propertyInfo in propertyInfos) { //过滤Ignore属性 int count = propertyInfo.GetCustomAttributes(false).Where(a => a is IgnoreAttribute).Count(); if (count > 0) { continue; } //主键如果是Identity则不允许主动插入数据 object pkAttr = propertyInfo.GetCustomAttributes(false).Where(a => a is KeyAttribute).FirstOrDefault(); if (pkAttr != null) { if ((pkAttr as KeyAttribute).Identity) { continue; } } //获取值 object obj = propertyInfo.GetValue(t, null); //赋值 if (obj == null) { row[propertyInfo.Name] = DBNull.Value; } else { row[propertyInfo.Name] = obj; } } //将新增行加入数据集 ds.Tables[0].Rows.Add(row); //更新数据到数据库 var scb = CreateCommandBuilder(); scb.DataAdapter = (System.Data.Common.DbDataAdapter)dapt; return dapt.Update(ds); } /// <summary> /// 修改数据 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="con"></param> /// <param name="t"></param> /// <param name="trans"></param> /// <returns></returns> public int Edit<T>(T t) where T : class, new() { //创建数据库链接 var con = CreateConnection(); //定义变量 PropertyInfo[] propertyInfos = typeof(T).GetProperties(); List<IDbDataParameter> parameters = new List<IDbDataParameter>(); StringBuilder s_where = new StringBuilder(); foreach (PropertyInfo propertyInfo in propertyInfos) { //如果是主键则跳过 int count = propertyInfo.GetCustomAttributes(false).Where(a => a is KeyAttribute).Count(); if (count <= 0) { continue; } //获取实体属性的值 object obj = propertyInfo.GetValue(t, null); //创建参数 IDbDataParameter parameter = null; if (obj == null) { parameter = CreateParameter(propertyInfo.Name, DBNull.Value); } else { parameter = CreateParameter(propertyInfo.Name, obj); } //设置参数类型 parameter.DbType = SetDbType(obj); //如果是字符串参数则设置值大小 if (obj.GetType() == typeof(string)) { var tmp_sla = propertyInfo.GetCustomAttributes(false).Where(a => a is StringLengthAttribute).FirstOrDefault(); if (tmp_sla != null) { parameter.Size = (tmp_sla as StringLengthAttribute).Length; } } //加入参数集合 parameters.Add(parameter); //设置sql语句 s_where.AppendAnd(propertyInfo.Name + "="+ParameterPrefix + propertyInfo.Name); } //如果实体未设置主键,则异常 if (parameters.Count <= 0) { throw new Exception("实体未设置KeyAttribute属性"); } //获取表名 string tblName = typeof(T).Name; var tblAttr = typeof(T).GetCustomAttributes(false).Where(a => a is TableNameAttribute).FirstOrDefault(); if (tblAttr != null) { tblName = (tblAttr as TableNameAttribute).Name; } //定义数据集 DataSet ds = new DataSet(); //创建sql命令查询数据库 var cmd = con.CreateCommand(); cmd.CommandText = "select * from " + tblName + " where " + s_where.ToString(); cmd.CommandType = CommandType.Text; //设置sql参数 foreach(var pp in parameters) { cmd.Parameters.Add(pp); } //设置事务 if (dbTransaction != null) cmd.Transaction = dbTransaction; //查询数据 var dapt = CreateDataAdapter(); dapt.SelectCommand = cmd; dapt.Fill(ds); //如果数据没记录,则异常提示 if (ds.Tables[0].Rows.Count <= 0) { throw new Exception("未找到符合条件的记录"); } //设置行修改状态 DataRow row = ds.Tables[0].Rows[0]; row.BeginEdit(); //修改行的值 foreach (PropertyInfo propertyInfo in propertyInfos) { //过滤Ignore和Key属性 int count = propertyInfo.GetCustomAttributes(false).Where(a => a is IgnoreAttribute || a is KeyAttribute).Count(); if (count > 0) { continue; } //获取属性值 object obj = propertyInfo.GetValue(t, null); //赋值 if (obj == null) { row[propertyInfo.Name] = DBNull.Value; } else { row[propertyInfo.Name] = obj; } } row.EndEdit(); //更新数据到数据库 var scb = CreateCommandBuilder(); scb.DataAdapter = (System.Data.Common.DbDataAdapter)dapt; return dapt.Update(ds); } /// <summary> /// 删除数据 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="con"></param> /// <param name="t"></param> /// <param name="trans"></param> /// <returns></returns> public int Delete<T>(T t) where T : class, new() { //创建数据库链接 var con = CreateConnection(); //定义变量 PropertyInfo[] propertyInfos = typeof(T).GetProperties(); List<IDbDataParameter> parameters = new List<IDbDataParameter>(); StringBuilder s_where = new StringBuilder(); foreach (PropertyInfo propertyInfo in propertyInfos) { //如果是主键则跳过 int count = propertyInfo.GetCustomAttributes(false).Where(a => a is KeyAttribute).Count(); if (count <= 0) { continue; } //获取实体类的值 object obj = propertyInfo.GetValue(t, null); //创建参数 IDbDataParameter parameter = null; if (obj == null) { parameter = CreateParameter(propertyInfo.Name, DBNull.Value); } else { parameter = CreateParameter(propertyInfo.Name, obj); } //设置参数类型 parameter.DbType = SetDbType(obj); //如果时字符串的参数,设置其大小 if (obj.GetType() == typeof(string)) { parameter.DbType = DbType.String; var tmp_sla = propertyInfo.GetCustomAttributes(false).Where(a => a is StringLengthAttribute).FirstOrDefault(); if (tmp_sla != null) { parameter.Size = (tmp_sla as StringLengthAttribute).Length; } } //设置参数值 parameters.Add(parameter); //设置Sql语句 s_where.AppendAnd(propertyInfo.Name + "="+ ParameterPrefix + propertyInfo.Name); } //校验实体是否设置主键 if (parameters.Count <= 0) { throw new Exception("实体未设置KeyAttribute属性"); } //查找表名 string tblName = typeof(T).Name; var tblAttr = typeof(T).GetCustomAttributes(false).Where(a => a is TableNameAttribute).FirstOrDefault(); if (tblAttr != null) { tblName = (tblAttr as TableNameAttribute).Name; } //定义数据集变量 DataSet ds = new DataSet(); //创建命令对象用于查询数据库 var cmd = con.CreateCommand(); cmd.CommandText = "select * from " + tblName + " where " + s_where.ToString(); cmd.CommandType = CommandType.Text; //设置参数 foreach (var pp in parameters) { cmd.Parameters.Add(pp); } //设置事务 if (dbTransaction != null) cmd.Transaction = dbTransaction; //填充记录 var dapt = CreateDataAdapter(); dapt.SelectCommand = cmd; dapt.Fill(ds); //校验是否有记录 if (ds.Tables[0].Rows.Count <= 0) { throw new Exception("未找到符合条件的记录"); } //删除数据 DataRow row = ds.Tables[0].Rows[0]; row.Delete(); //更新删除操作到数据库 var scb = CreateCommandBuilder(); scb.DataAdapter = (System.Data.Common.DbDataAdapter)dapt; return dapt.Update(ds); } /// <summary> /// 设置类型 /// </summary> /// <param name="obj"></param> /// <returns></returns> DbType SetDbType(object obj) { if (obj.GetType() == typeof(double)) return DbType.Double; else if (obj.GetType() == typeof(float)) return DbType.Double; else if (obj.GetType() == typeof(decimal)) return DbType.Decimal; else if (obj.GetType() == typeof(DateTime)) return DbType.DateTime; else if (obj.GetType() == typeof(int)) return DbType.Int32; else if (obj.GetType() == typeof(long)) return DbType.Int64; else return DbType.String; } } }
自定义Model属性
using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Web; using xscjglxt.Utils; namespace xscjglxt.Models { public abstract class baseEntity { /// <summary> /// 构造函数中创建表 /// </summary> public baseEntity() { CreateTable(); } /// <summary> /// 获取表名 /// </summary> /// <returns></returns> public string GetTableName() { string tblName = this.GetType().Name; var tblAttr = this.GetType().GetCustomAttributes(false).Where(a => a is TableNameAttribute).FirstOrDefault(); if (tblAttr != null) { tblName = (tblAttr as TableNameAttribute).Name; } return tblName; } /// <summary> /// 获取创建表的语句 /// </summary> /// <returns></returns> public virtual string GetTableSql() { PropertyInfo[] propertyInfos = GetType().GetProperties(); StringBuilder s_pk = new StringBuilder(); StringBuilder s_col = new StringBuilder(); var Sql = new SqlFactoryUtil(); //循环属性 foreach (PropertyInfo propertyInfo in propertyInfos) { //过滤Ignore属性 int count = propertyInfo.GetCustomAttributes(false).Where(a => a is IgnoreAttribute).Count(); if (count > 0) { continue; } //判断主键 bool isNull = false; var attr_key = propertyInfo.GetCustomAttributes(false).Where(a => a is KeyAttribute).FirstOrDefault(); if (attr_key != null) { isNull = false; if (s_pk.Length > 0) s_pk.Append(","); s_pk.Append(Sql.QuotePrefix + propertyInfo.Name + Sql.QuoteSuffix); bool identity = (attr_key as KeyAttribute).Identity; //如果识别到自增长主键,则执行玩之后循环下一条 if (identity) { if (s_col.Length > 0) s_col.AppendLine(","); s_col.AppendFormat("{0} int identity(1,1) not null", Sql.QuotePrefix+propertyInfo.Name+ Sql.QuoteSuffix); continue; } } string dbType = ""; if (propertyInfo.PropertyType == typeof(double)) { dbType = "numeric(12,2)"; } else if (propertyInfo.PropertyType == typeof(float)) { dbType = "numeric(12,2)"; } else if (propertyInfo.PropertyType == typeof(decimal)) { dbType = "numeric(12,2)"; } else if (propertyInfo.PropertyType == typeof(DateTime)) { dbType = "datetime"; } else if (propertyInfo.PropertyType == typeof(int)) { dbType = "int"; } else if (propertyInfo.PropertyType == typeof(long)) { dbType = "long"; } else if (propertyInfo.PropertyType == typeof(double?)) { isNull = true; dbType = "numeric(12,2)"; } else if (propertyInfo.PropertyType == typeof(float?)) { isNull = true; dbType = "numeric(12,2)"; } else if (propertyInfo.PropertyType == typeof(decimal?)) { isNull = true; dbType = "numeric(12,2)"; } else if (propertyInfo.PropertyType == typeof(DateTime?)) { isNull = true; dbType = "datetime"; } else if (propertyInfo.PropertyType == typeof(int?)) { isNull = true; dbType = "int"; } else if (propertyInfo.PropertyType == typeof(long?)) { isNull = true; dbType = "long"; } else { isNull = true; dbType = "nvarchar(max)"; var attr_strLen = propertyInfo.GetCustomAttributes(false).Where(a => a is StringLengthAttribute).FirstOrDefault(); if (attr_strLen != null) { int len = (attr_strLen as StringLengthAttribute).Length; dbType = "nvarchar(" + len.ToString() + ")"; } } //主键不需要判断是否为空的属性 var attr_req = propertyInfo.GetCustomAttributes(false).Where(a => a is RequiredAttribute).FirstOrDefault(); //非主键的可以校验 if (attr_req != null&& attr_key == null) { isNull = false; } //主键强制设置为非空 if (attr_key != null) { isNull = false; } if (s_col.Length > 0) s_col.AppendLine(","); s_col.AppendFormat("{0} {1} {2}", Sql.QuotePrefix + propertyInfo.Name + Sql.QuoteSuffix, dbType, isNull ? "null" : "not null"); } StringBuilder s_tbl = new StringBuilder(); s_tbl.AppendLine("CREATE TABLE " + Sql.QuotePrefix + GetTableName() + Sql.QuoteSuffix + "("); s_tbl.AppendLine(s_col.ToString()); s_tbl.AppendLine("constraint pk_" + GetTableName() + " primary key(" + s_pk.ToString() + ")"); s_tbl.AppendLine(")"); return s_tbl.ToString(); } /// <summary> /// 创建表 /// </summary> public void CreateTable() { string sql = GetTableSql(); if (string.IsNullOrEmpty(sql)) return; var Sql = new SqlFactoryUtil(); int count = 0; try { count = Sql.QueryDataSet("select top 1 * from " + GetTableName()).Tables[0].Rows.Count; } catch { count = -1; } if (count < 0) { Sql.ExecuteSql(sql); } if (count <= 0 && GetType().Name.ToUpper() == "用户表") { Sql.ExecuteSql("insert into dbo.["+GetTableName()+ "]([账号],[密码],[姓名],[性别],[身份证号],[用户类别])values(@账号,@密码,@姓名,@性别,@身份证号,@用户类别)", new System.Data.IDbDataParameter[] { Sql.CreateParameter("@账号","admin"), Sql.CreateParameter("@密码","123456"), Sql.CreateParameter("@姓名","管理员"), Sql.CreateParameter("@性别","男"), Sql.CreateParameter("@身份证号","111"), Sql.CreateParameter("@用户类别","管理员") }); } } } }