本章节主要讲述如何使用Smark.Data 1.8进行快速的数据库应用开发,主要内容包括配置,执行SQL和存储过程等基础的数据操作.
配置
在组件使用之前必须进行一个初始化配置,主要配置数据访问设备和对应的数据库的连接信息.组件可以通过两种途径来进行数据配置分别是配置文件和代码.
- Config配置
<configSections> <section name="smarkdata" type="Smark.Data.SmarkDataSection,Smark.Data"/> </configSections> <smarkdata> <Connection> <add name="0" type="Smark.Data.MSSQL,Smark.Data" connectionstring="Data Source=WIN-KHLG2RFMS2R;Initial Catalog=Northwind;User ID=sa;Password=abc_123"/> </Connection> <Assembly> <clear/> <Assembly/> </smarkdata>
- 代码配置
DBContext.SetConnectionDriver<MSSQL>(ConnectionType.Context1); DBContext.SetConnectionString(ConnectionType.Context1, @"Data Source=WIN-KHLG2RFMS2R;Initial Catalog=Northwind;User ID=sa;Password=abc_123");以上分别是配置一个MSSQL的数据访问设备和相应的数据库连接信息.也许会有同学问组件支持多数据库配置吗?答案是可以的,组件支持最多配置30个不同数据访问信息.简单地说使用Smark.Data进行数据库开发的时候可以同时访问多达30个数据库;相信这个配置时是完全可以满足大部分应用的需要,如果不够当然可以联系我或自己下载代码修改一下:)
执行SQL
配置好数据访问上下文后,执行SQL语句就会变得很方便.
- 执行SQL并填充到对象列表
Query<IList<Employee>> query = "select * from employees"; foreach (Employee item in query.Value) { }组件会把字段名和对象属性名称一致的自动匹配并填充相应的值;填充的实体需要描述吗?不需要组件会在运行期处理.是使用反射填充吗?不会组件同样会在运行期内生成对应用的代理方法代替反射操作.- 在很多时候我们需要查询一条记录
Query<Employee> query = "select * from employees where EmployeeID=3"; string firstname = query.Value.FirstName;- 如果需要执行一个统计
Query<int> query = "select count(*) from employees"; int count = query.Value;- 有时候查询需要动态组合
由于很多时候SQL都是动态组合,因此组件提供了一个SQL对象来处理这些情况.DateTime? start=null, end=null; SQL sql = "select * from orders where 1=1"; if (start != null) sql=sql["start",start.Value] +" orderdate >=@start"; if(end !=null) sql = sql["end", end.Value] + " orderdate <@end"; Query<IList<OrderBase>> query = sql;
执行存储过程
组件调用存储过程需要用对象来描述.
- 存储过程
ALTER PROCEDURE [dbo].[CustOrderHist] @CustomerID nchar(5) AS SELECT ProductName, Total=SUM(Quantity) FROM Products P, [Order Details] OD, Orders O, Customers C WHERE C.CustomerID = @CustomerID AND C.CustomerID = O.CustomerID AND O.OrderID = OD.OrderID AND OD.ProductID = P.ProductID GROUP BY ProductName- 描述结构
[Proc] public class CustOrderHist:StoredProcedure { [ProcParameter] public string CustomerID { get; set; } }可以简单地通过承继StoreProcedure类来实现一个存储过程描述,通过Proc属性来描述存储过程名称,缺省情况下存储过称名称是相应的类名称;ProcParameter用于描述存储对应的存参数,可以通过Direction来设置参数的类型,以是参数为输出和返回类型的时,对象在执行完成后通过访问相关属性值即可得到相应的输出或返回值.- 执行存储过程
CustOrderHist coh = new CustOrderHist(); coh.CustomerID = "ALFKI"; Query<IList<OrderHist>> query = coh;只需要简单把描述对象设置给相应的查询对象即可.
以上就是组件使用SQL和存储的情况,如果你是SQL或存储过程的忠实fans那相信Smark.Data所提供的功能会让你在基础的数据操作上变得更轻松.对于偏向于对象映射操作的朋友们也不要感到失望,因为下一章节会详细讲术组件的对象映射功能,相信在对象操作上同样也会带来惊喜.
疑问:为什么在所有访问操作过程都没看到指定DB的信息?
其实组件会默认使用第一个配置的DBContext,所以操作在不指定DBContext的情况下都是使用它.