Farseer.net轻量级开源框架 中级篇:执行SQL语句

导航

目   录:Farseer.net轻量级开源框架 目录

上一篇:Farseer.net轻量级开源框架 中篇: 事务的使用

下一篇:Farseer.net轻量级开源框架 中级篇: DbFactory数据工厂

使用自定义SQL,或者存储过程。仍然使用:DbExecutor ,没错,其实框架最终执行,都是到这个类里把生成的SQL传进来的。

因此你也可以使用自己传进来的SQL进行执行你想要的结果。

我们先看下这里面有哪些方法吧。(其实很像你们以前接触过的:DbHelper....)

 1         /// <summary>
 2         ///     返回第一行第一列数据
 3         /// </summary>
 4         /// <param name="cmdType">执行方式</param>
 5         /// <param name="cmdText">SQL或者存储过程名称</param>
 6         /// <param name="parameters">参数</param>
 7         public object ExecuteScalar(CommandType cmdType, string cmdText, params DbParameter[] parameters)
 8
 9         /// <summary>
10         ///     返回受影响的行数
11         /// </summary>
12         /// <param name="cmdType">执行方式</param>
13         /// <param name="cmdText">SQL或者存储过程名称</param>
14         /// <param name="parameters">参数</param>
15         public int ExecuteNonQuery(CommandType cmdType, string cmdText, params DbParameter[] parameters)
16
17         /// <summary>
18         ///     返回数据(IDataReader)
19         /// </summary>
20         /// <param name="cmdType">执行方式</param>
21         /// <param name="cmdText">SQL或者存储过程名称</param>
22         /// <param name="parameters">参数</param>
23         public IDataReader GetReader(CommandType cmdType, string cmdText, params DbParameter[] parameters)
24
25         /// <summary>
26         ///     返回数据(DataSet)
27         /// </summary>
28         /// <param name="cmdType">执行方式</param>
29         /// <param name="cmdText">SQL或者存储过程名称</param>
30         /// <param name="parameters">参数</param>
31         public DataSet GetDataSet(CommandType cmdType, string cmdText, params DbParameter[] parameters)
32
33         /// <summary>
34         ///     返回数据(DataTable)
35         /// </summary>
36         /// <param name="cmdType">执行方式</param>
37         /// <param name="cmdText">SQL或者存储过程名称</param>
38         /// <param name="parameters">参数</param>
39         public DataTable GetDataTable(CommandType cmdType, string cmdText, params DbParameter[] parameters)
CommandType cmdType:枚举,意为要使用哪种命令传输。
 1 namespace System.Data
 2 {
 3     // 摘要:
 4     //     指定如何解释命令字符串。
 5     public enum CommandType
 6     {
 7         // 摘要:
 8         //     SQL 文本命令。(默认。)
 9         Text = 1,
10         //
11         // 摘要:
12         //     存储过程的名称。
13         StoredProcedure = 4,
14         //
15         // 摘要:
16         //     表的名称。
17         TableDirect = 512,
18     }
19 }
string cmdText:SQL语句,或者存储过程的名称。
params DbParameter[] parameters:参数列表

比如:
1         //最原始的方式。
2         using (DbExecutor db = new DbExecutor(DataBaseType.SqlServer, "User ID=sa;Password=123456;Pooling=true;Data Source=.;Initial Catalog=Farseer;", 30, System.Data.IsolationLevel.ReadCommitted))
3         {
4             // 执行插入的操作。
5             db.ExecuteNonQuery(System.Data.CommandType.Text, "insert into users(UserName,RoleID) Values(‘张三‘,0)");
6             // 操作完成后,记得要关闭,释放资源。 如果你像我这样使用了using 下面是可以不用执行的。如果没用,则必须加上。
7             db.Close(true);
8         }

上面DEMO,是做了一个插入的操作。ExecuteNonQuery 返回 “影响的行数”  int 类型。  意思是数据库表中记录的影响行数。

 1         // 利用DbFactory,创建了DbExecutor对象
 2         // 第1个参数 0 代表的是数据库配置:DbConfig 的索引项。在:~/App_Data/Db.config 中
 3         using (DbExecutor db = DbFactory.CreateDbExecutor(0, System.Data.IsolationLevel.ReadCommitted))
 4         {
 5             // 执行插入的操作。
 6             DataTable dt = db.GetDataTable(System.Data.CommandType.Text, "select * from users");
 7             // 可以依赖扩展方法把DataTable 转成 List<User> 哦
 8             List<Users> lst = dt.ToList<Users>();
 9             // 操作完成后,记得要关闭,释放资源。 如果你像我这样使用了using 下面是可以不用执行的。如果没用,则必须加上。
10             db.Close(true);
11         }

上面DEMO中。使用GetDataTable方式,获取DataTable。框架对DataTable  提供了 转到 List 实体类的扩展方法哦。

 1         // 利用Users泛型,创建了DbExecutor对象
 2         // 会通过对Users缓存的反射结果,查询这个实体的数据库连接方式。(其实还是转到数据库配置索引项)
 3         using (DbExecutor db = DbFactory.CreateDbExecutor<Users>(System.Data.IsolationLevel.ReadCommitted))
 4         {
 5             // 这里,我们用了一个新的类:SqlServerProvider 或者 DbProvider
 6             // SqlServerProvider 继承在 DbProvider
 7             var provider = new SqlServerProvider();
 8
 9
10             // 或者也可以用 DbFactory.CreateDbProvider  通过传入的Users 来判断你的数据库类型(有可能你的不是SqlServer)
11             // DbProvider 是用来为我们提供不同数据库的一些特性。比如下文中的创建数据库的参数,或者数据库的保护符号,或者参数符号的前缀。不同数据库的这些都是不一样的。
12             var provider = DbFactory.CreateDbProvider<Users>();
13
14
15             db.ExecuteNonQuery(System.Data.CommandType.Text, "update users set username = @userName where id = @id", provider.CreateDbParam("userName", "张三", DbType.String, 50));
16         }

这种方式,采用了 参数的方式进行提交。可以避免 ASP当时最危险的漏洞:SQL注入

DbProvider

什么是DbProvider,我们先看下DbProvider的工作方式,如下图:

每个数据库类型都会包含有自己的Provider。 这个Provider主要是提供数据库的特有的特性。

举个例子,在Sqlserver中。对于表名、字段名的保护符号是:[]  中括号。为了避免一些名称定义成SQLSERVER特有的关键词,可以理解为是一种转义符。而MySql用的是:  ‘’  两个单引号。

总结

怎么样?感觉是不是又回到了DbHelper的时代了。如果你担心ORM的性能慢,有这种强破症,你完全可以使用这种方式进行底层的访问。

按这种ORM性能的程度访问,可以分为三种:

完全使用ORM,返回List实体。

只使用ORM的操作,但返回DataTable数据。少了DataTable转到实体的性能消耗(非常昂贵的,貌似外文书都是这么翻译的)。

完全不使用。回到DbHelper方式。

以上三种方式都是支持的。

导航

目   录:Farseer.net轻量级开源框架 目录

上一篇:Farseer.net轻量级开源框架篇: 事务的使用

下一篇:Farseer.net轻量级开源框架 中级篇: DbFactory数据工厂

广告时间

QQ群:116228666 (Farseer.net开源框架交流) 请注明:博客园

Farseer.Net是一款ORM框架 + 常用工具 + 扩展集合。

Farseer 意为:先知、预言家 通常在某些场合时,提供计谋、策略。也希望该框架能给大家提供最大化的便捷。

ORM:其英文全称是:Object(对象) Relational(关系) Mapping(映射)

Farseer.Net的目标是:快速上手、快速开发、简单方便。

1 new User { ID = 1, Name = "张三" }.Insert()
时间: 2024-08-05 07:48:25

Farseer.net轻量级开源框架 中级篇:执行SQL语句的相关文章

Farseer.net轻量级开源框架 中级篇:SQL执行报告

导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: 数据库切换 下一篇:Farseer.net轻量级开源框架 中级篇: 探究ORM(Mapping) 很多时候,我们希望能知道我们写的项目在运行过程中到底执行了哪些SQL语句,或者说一个页面中访问了几次数据库.好让我们在优化的时候提供一些方向. 举个例子,作者在有时候,会自信的认为这个页面很简单,估计也就顶多5条SQL语句就可以了.可是当打开SQL报告之后才吓傻眼,几十条SQL,看的

Farseer.net轻量级开源框架 中级篇:数据库切换

导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: 动态数据库访问 下一篇:Farseer.net轻量级开源框架 中级篇: SQL执行报告 上文中讲述了,在项目运行过程中,如何通过代码动态改变数据库的访问,这种方式更加倾向于实体类相同,有多个相同的表结构. 本篇中讲述的是,如何快速切换不同的数据库.比如你现在使用在使用SqlServer 哪天数据库老板心血来潮,让你换成Oracle了,怎么办? 这种数据库的切换在ORM中能明显突出

Farseer.net轻量级开源框架 中级篇:探究ORM(Mapping)

导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: SQL执行报告 下一篇:Farseer.net轻量级开源框架 中级篇: Cookies.Session.Request 在Farseer.Net 中 ORM的核心在命名空间:FS.ORM . 目前只有4个类文件.其实这4个文件只要是用来做数据库与实体模型之间的映射关系及缓存.至于SQL生成.不同数据库的驱动支持等 在另外的命名空间:FS.Core 中. 对于ORM来说,我们在转换

Farseer.net轻量级开源框架 中级篇:动态数据库访问

导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: 自定义配置文件 下一篇:Farseer.net轻量级开源框架 中级篇: 数据库切换 说到动态数据库的访问,不得不说的是,我们的实体类,是如何找到数据库配置并访问的呢? 回顾下我们的Users类: 1 [DB(Name = "Members_User")] 2 public class Users : BaseModel<Users>; 这里有个DB的特性,其

Farseer.net轻量级开源框架 中级篇:常用的扩展方法

导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: BasePage.BaseController.BaseHandler.BaseMasterPage.BaseControls基类使用 下一篇:Farseer.net轻量级开源框架 中级篇: 常用工具 在使用框架的时候,都需要引用扩展方法的命名空间:using FS.Extend; 1 /// <summary> 2 /// 将值转换成类型对像的值(此方法作为公共的调用,只支持

Farseer.net轻量级开源框架 中级篇:DbFactory数据工厂

导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: 执行SQL语句 下一篇:Farseer.net轻量级开源框架 中级篇: 数据绑定 越讲到后面,我们离基础的语法越远了.看到这篇文章,先恭喜下,说明大家已经能用该框架做日常的开发了. 当然还有一些绑定技巧,比如把枚举.List<Users>绑定到DorpDownList.CheckBoxList.RadioButtonList 并显示中文 在下一篇中再解释. 这一篇中,我们主要讲

Farseer.net轻量级开源框架 中级篇:Cookies、Session、Request

导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: 探究ORM(Mapping) 下一篇:Farseer.net轻量级开源框架 中级篇: UrlRewriter 地址重写 Cookies.Session.Request是专门针对WEB项目的额外支持. 顺便说下,今天有园友在群里问到ORM对MVC的支持.或者对WinForm支持吗?对于ORM来说,本身是对表现层没有任何的联系.它仅仅是让你在开发的时候,能以面向对象的思想(语法)去做

Farseer.net轻量级开源框架 中级篇:自定义配置文件

导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: 数据绑定 下一篇:Farseer.net轻量级开源框架 中级篇: 动态数据库访问 什么是自定义配置文件 目前系统提供了多个配置文件,一些开发过程中常用到的一些配置. 既然是配置,那么说明一些设置可能会根据项目的不同而有所不同.比如web.config其实就是个配置文件. 当我们定义好配置文件后,在项目运行的时调用了配置,都将在:~/App_Data/  文件夹中生成(如果不存在这

Farseer.net轻量级开源框架 中级篇:BasePage、BaseController、BaseHandler、BaseMasterPage、BaseControls基类使用

导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: UrlRewriter 地址重写 下一篇:Farseer.net轻量级开源框架 中级篇: 常用的扩展方法 BasePage基类:  在Asp.Net中我们建立的aspx页面都是继承在:System.Web.UI.Page.在使用Farseer后,需要继承到:FS.Core.Page.BasePage中. BaseController基类: 在Asp.Net中我们建立的mvc控制器