public User GetUser(Guid id) { User user = new User(); user.Id = id; if (_dataBase.Fill<User>(user)) return user; ; }
Fill 方法返回一个 bool 值,表示是否成功查询并填充了数据。
Fill 方法也有一个高阶重载,可以额外指定查询条件:
public bool Fill<T>(object obj, Dictionary<string, object> attachedWhere) where T : class,new()
4.SQL 语句构造器
有时,我们希望直接通过 SQL 语句实现对数据库表的简单操作,升讯威ADO.NET增强组件提供了一个 SQL 语句构造器,帮助生成 SQL 语句,可以减轻开发人员编写 SQL 语句的工作量和出错的可能性,提高软件工程的质量。
public void AddUser(User user) { SqlStructureBuild sqlStructureBuild = new SqlStructureBuild(); sqlStructureBuild.Type = SqlExpressionType.Insert; sqlStructureBuild.Table = ; sqlStructureBuild.AddParameter(, user.Id); sqlStructureBuild.AddParameter(, user.Name); sqlStructureBuild.AddParameter(, user.Age); SqlExpression sqlExpression = sqlStructureBuild.GetSqlExpression(); _dataBase.ExcuteSqlExpression(sqlExpression); }
ExcuteSqlExpression 方法在执行 SQL 构造器生成的 SqlExpression 对象时,使用的是参数化,强类型的方法进行的。
5.事务
对于连续的数据库操作,升讯威ADO.NET增强组件自动封装为一个事务进行执行,如果执行失败,将自动回滚。
a) 连续写入操作
非常简单,直接使用 Insert 方法插入一个对象集合既可,方法原型如下:
public void InsertList(List<object> objList)
连接的写入操作时,并不要求传入的参数是同样类型的,也就是说可以传入多个不同类似的实体对象,如同时传入User和Order,升讯威ADO.NET增强组件也会将其封装为事务执行,要么全部写入成功,要么回滚。
b) 复杂复合操作
对于相对复杂的数据库事务操作,可使用 SQL 语句构造器,分别构造 SqlExpression 对象,将其按执行顺序放入集合中,通过 ExcuteSqlExpression 执行即可。
public void ExcuteSqlExpression(List<SqlExpression> sqlExpressionList)
这种方式执行的多个 SqlExpression 对象,亦封装为事务进行执行。
四、原生操作
升讯威ADO.NET增强组件支持对数据库进行原生操作,在此基础之上,结合上述功能,实现简单高效高灵活性的数据库操作。
public int ExecuteNonQuery(string commandText) public int ExecuteNonQuery(string commandText, List<CommandParameter> parameterList) public int ExecuteNonQuery(CommandType commandType, string commandText, List<CommandParameter> parameterList) public object ExecuteScalar(string commandText) public object ExecuteScalar(string commandText, List<CommandParameter> parameterList) public object ExecuteScalar(CommandType commandType, string commandText, List<CommandParameter> parameterList) public DataSet ExecuteDataSet(string commandText) public DataSet ExecuteDataSet(string commandText, string tableName) public DataSet ExecuteDataSet(CommandType commandType, string commandText, string tableName) public DataSet ExecuteDataSet(string commandText, List<CommandParameter> parameterList, string tableName) public DataSet ExecuteDataSet(CommandType commandType, string commandText,List<CommandParameter> parameterList, string tableName)
综上所述,升讯威ADO.NET增强组件强调的并非实体类与数据库表结构的强关联,而是通过与内存数据集的动态映射,将数据库操作时大量的重复劳动自动化,对于复杂数据库操作,继续使用原生 SQL,存储过程,自定义函数,视图等。
这种方式结合了 ORM 自动化的优点,又充分利用了数据库原生操作的强大功能,使数据层的开发轻松,高效,高质量。将简单的,重复的体力劳动,交由程序自动化处理,复杂业务场景由人工处理,并将数据映射,取/赋值等重复劳动,自动化处理。
以上设计实现难免存在考虑不周的情况,希望和大家多多交流。
欢迎加我QQ交流探讨,共同学习:279060597,另外我在南京,有南京的朋友吗?