.net 简易数据库操作框架1.6
来源:互联网 发布:软件的盈利模式 编辑:程序博客网 时间:2024/06/05 20:14
由于分页部分我还没有想好怎么写,所以暂时不写了,后续会更新。写好生成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); /// <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.加好友注明是博客。如需源码请加好友联系我。
阅读全文
0 0
- .net 简易数据库操作框架1.6
- .net 简易数据库操作框架1.1
- .net 简易数据库操作框架1.2
- .net 简易数据库操作框架1.3
- .net 简易数据库操作框架1.4
- .net 简易数据库操作框架1.5
- QML 数据库操作 简易篇
- F.NET框架示例(四)、数据库操作 之 新增
- F.NET框架示例(五)、数据库操作 之 修改
- F.NET框架示例(六)、数据库操作 之 删除
- 手撸一个简易Android数据库框架
- asp.net 2.0 数据库访简易类
- yii简易留言板 AR操作数据库
- tp操作mongodb数据库之简易留言板
- 数据库操作框架
- CI框架 数据库操作
- OrmLite框架操作数据库
- .Net操作数据库大全
- BAPI_OUTB_DELIVERY_CREATE_SLS 创建外向交货单(参考SO)
- Verilog中assign的用法
- 解决Zookeeper无法启动的问题
- 链表翻转的是三种方法
- 单例模式
- .net 简易数据库操作框架1.6
- Linux多线程──3个子线程轮流运行
- add(int index, E element) 在列表的指定位置插入元素
- day58:hibernate04_JPA注解方式实现hibernate CRUD--【用户添加角色没那摩神秘】
- [HDU] 2054 -A == B ?
- 【HDU4336】Card Collector-状态压缩DP+期望DP
- python绘图实践-泰坦尼克号绘图
- 设计模式系列之「状态模式」
- Http和Https的简单理解