using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
using System.Configuration;
using System.Data.SqlClient;using System.Reflection;using System.Data;namespace Test{ public class DataAccess { private static string conString; public DataAccess(string name) { //构造方法中读取并保存配置文件中的连接字符串 if (string.IsNullOrEmpty(conString)) { conString = ConfigurationManager.ConnectionStrings[name].ConnectionString; } } //完成全部表的新增 //新增的sql语句是根据映射关系动态生成的 //T是实体类的类名 public bool Add<T>(T obj) where T : new() { bool result = false; //动态构建sql语句和参数 List<SqlParameter> pars = new List<SqlParameter>(); StringBuilder sb = new StringBuilder(); Type type = typeof(T); PropertyInfo[] pis = type.GetProperties(); sb.Append("insert into " + type.Name + " values("); //按照属性循环,向SQL语句中添加参数,参数名=@属性名 foreach (var pi in pis) { if (!(pi.Name.StartsWith("Id") || pi.Name.EndsWith("Id"))) { sb.Append("@" + pi.Name + ","); //每个属性转换成参数对象 pars.Add(new SqlParameter("@" + pi.Name, pi.GetValue(obj))); } else { if( Attribute.GetCustomAttribute(pi,typeof(FKAttribute))!=null) { sb.Append("@" + pi.Name + ","); //每个属性转换成参数对象 pars.Add(new SqlParameter("@" + pi.Name, pi.GetValue(obj))); } } } string sql = sb.ToString(); sql = sql.Substring(0, sql.Length - 1) + ")"; //访问数据库 int rows = SqlHelper.ExecuteNonQuery(conString, CommandType.Text, sql, pars.ToArray()); if (rows > 0) result = true; return result; } }}
以上只实现了泛型的通用数据库新增功能,撸代码撸累了,剩下的功能改日再更新。