.net 简易数据库操作框架1.6
2017-09-22 16:39
429 查看
由于分页部分我还没有想好怎么写,所以暂时不写了,后续会更新。 写好生成sql语句的类之后我就写数据库操作接口
public interface DBOperation { /// <summary> /// 新增 /// </summary> /// <typeparam name="T">类型</typeparam> /// <param name="t">对象</param> /// <returns>自增列</returns> object Sava<T>(T t); /// <summary> /// 修改 /// </summary> /// <typeparam name="T">类型</typeparam> /// <param name="t">对象</param> /// <returns>受影响行数</returns> int Update<T>(T t); /// <summary> /// 修改 /// </summary> /// <typeparam name="T">类型</typeparam> /// <param name="sql">修改的语句</param> /// <param name="args">参数</param> /// <returns>受影响行数</returns> int Update<T>(string sql, params object[] args); /// <summary> /// 查询单个对象 /// </summary> /// <typeparam name="T">类型</typeparam> /// <param name="obj">主键值</param> /// <returns></returns> T Query<T>(object obj); /// cca0 <summary> /// 查询 /// </summary> /// <typeparam name="T">类型</typeparam> /// <param name="sql">查询的语句</param> /// <param name="args">参数</param> /// <returns></returns> List<T> Query<T>(string sql, params object[] args); /// <summary> /// 删除 /// </summary> /// <typeparam name="T">类型</typeparam> /// <param name="sql">删除的语句</param> /// <param name="args">参数</param> /// <returns>受影响行数</returns> int Delete<T>(string sql, params object[] args); }
然后实现SqlServer的方法
public class SqlServerOperation : DBOperation { public string conSql; public GetSql get=new GetSqlServer(); public DBHelpercs db=null; /// <summary> /// 实例化数据库操作对象 /// </summary> /// <param name="conSql"></param> public SqlServerOperation(string conSql) { this.conSql = conSql; db=new SqlHelper(conSql); } public object Sava<T>(T t) { List<object> list = get.Sava<T>(t); return db.SingleLine(list[1] as SqlParameter[], list[0].ToString()); } public int Update<T>(T t) { List<object> list = get.Update<T>(t); return db.exectue(list[1] as SqlParameter[], list[0].ToString()); } public int Update<T>(string sql, params object[] args) { List<object> list = get.Update<T>(sql,args); return db.exectue(list[1] as SqlParameter[], list[0].ToString()); } public T Query<T>(object obj) { List<object> list = get.Query<T>(obj); SqlDataReader reader = db.Query(list[1] as SqlParameter[], list[0].ToString()) as SqlDataReader; return ReaderToList<T>(reader)[0]; } public List<T> Query<T>(string sql, params object[] args) { List<object> list = get.Query<T>(sql,args); SqlDataReader reader = db.Query(list[1] as SqlParameter[], list[0].ToString()) as SqlDataReader; return ReaderToList<T>(reader); } public int Delete<T>(string sql, params object[] args) { List<object> list = get.Delete<T>(sql, args); return db.exectue(list[1] as SqlParameter[], list[0].ToString()); } /// <summary> /// DataReader转泛型 /// </summary> /// <typeparam name="T">传入的实体类</typeparam> /// <param name="objReader">DataReader对象</param> /// <returns></returns> public List<T> ReaderToList<T>(IDataReader objReader) { using (objReader) { List<T> list = new List<T>(); //获取传入的数据类型 Type modelType = typeof(T); //遍历DataReader对象 while (objReader.Read()) { //使用与指定参数匹配最高的构造函数,来创建指定类型的实例 T model = Activator.CreateInstance<T>(); for (int i = 0; i < objReader.FieldCount; i++) { //判断字段值是否为空或不存在的值 if (!IsNullOrDBNull(objReader[i])) { //匹配字段名 PropertyInfo pi = modelType.GetProperty(objReader.GetName(i), BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase); if (pi != null) { //绑定实体对象中同名的字段 pi.SetValue(model, CheckType(objReader[i], pi.PropertyType), null); } } } list.Add(model); } return list; } } /// <summary> /// 对可空类型进行判断转换(*要不然会报错) /// </summary> /// <param name="value">DataReader字段的值</param> /// <param name="conversionType">该字段的类型</param> /// <returns></returns> private object CheckType(object value, Type conversionType) { if (conversionType.IsGenericType && conversionType.GetGenericTypeDefinition().Equals(typeof(Nullable<>))) { if (value == null) return null; System.ComponentModel.NullableConverter nullableConverter = new System.ComponentModel.NullableConverter(conversionType); conversionType = nullableConverter.UnderlyingType; } return Convert.ChangeType(value, conversionType); } /// <summary> /// 判断指定对象是否是有效值 /// </summary> /// <param name="obj"></param> /// <returns></returns> private bool IsNullOrDBNull(object obj) { return (obj == null || (obj is DBNull)) ? true : false; } /// <summary> /// DataReader转模型 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="objReader"></param> /// <returns></returns> public T ReaderToModel<T>(IDataReader objReader) { using (objReader) { if (objReader.Read()) { Type modelType = typeof(T); int count = objReader.FieldCount; T model = Activator.CreateInstance<T>(); for (int i = 0; i < count; i++) { if (!IsNullOrDBNull(objReader[i])) { PropertyInfo pi = modelType.GetProperty(objReader.GetName(i), BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase); if (pi != null) { pi.SetValue(model, CheckType(objReader[i], pi.PropertyType), null); } } } return model; } } return default(T); } }
到此,我的数据库简易操作框架已经写完了。
第一次写博客,很多地方不懂,欢迎大家批评指正,谢谢!联系QQ:1831996117.加好友注明是博客。如需源码请加好友联系我。
相关文章推荐
- .net 简易数据库操作框架1.3
- .net 简易数据库操作框架1.4
- .net 简易数据库操作框架1.5
- .net 简易数据库操作框架1.1
- .Net使用对象关系映射框架Entity Framework操作数据库及其内容
- .net 简易数据库操作框架1.2
- JDBC数据源(DataSource)数据源技术是Java操作数据库的一个很关键技术,流行的持久化框架都离不开数据源的应用。
- yii2 框架数据库常用操作
- .NET快速信息化系统开发框架 V3.2 -> WinForm“组织机构管理”界面组织机构权限管理采用新的界面,操作权限按模块进行展示
- CodeIgniter框架数据库基本操作示例
- .NET使用DAO.NET实体类模型操作数据库
- Python 3.x之数据库框架Sqlalchemy操作SQlite
- ThinkPHP框架基于PDO方式连接数据库操作示例
- 基于.NET的LINQ to SQL 三层架构开发之数据库操作通用代码
- Android中数据库操作框架Realm介绍与使用
- nodejs系列(3)Express框架GET、POST、COOKIE、上传、数据库操作
- Yii 框架里数据库操作详解-[增加、查询、更新、删除的方法
- 第三百零七节,Django框架,models.py模块,数据库操作——表类容的增删改查
- Yii 框架里数据库操作详解-[增加、查询、更新、删除的方法 'AR模式'
- Android sqlite数据库操作通用框架AHibernate(二)-CRUD ...