Farseer.net轻量级开源框架 中级篇:执行SQL语句
上一篇:Farseer.net轻量级开源框架 中级篇: 事务的使用
下一篇:Farseer.net轻量级开源框架 中级篇: DbFactory数据工厂
使用自定义SQL,或者存储过程。仍然使用:DbExecutor ,没错,其实框架最终执行,都是到这个类里把生成的SQL传进来的。
因此你也可以使用自己传进来的SQL进行执行你想要的结果。
我们先看下这里面有哪些方法吧。(其实很像你们以前接触过的:DbHelper....)
/// <summary>
/// 返回第一行第一列数据
/// </summary>
/// <param name="cmdType">执行方式</param>
/// <param name="cmdText">SQL或者存储过程名称</param>
/// <param name="parameters">参数</param>
public object ExecuteScalar(CommandType cmdType, string cmdText, params DbParameter[] parameters) /// <summary>
/// 返回受影响的行数
/// </summary>
/// <param name="cmdType">执行方式</param>
/// <param name="cmdText">SQL或者存储过程名称</param>
/// <param name="parameters">参数</param>
public int ExecuteNonQuery(CommandType cmdType, string cmdText, params DbParameter[] parameters) /// <summary>
/// 返回数据(IDataReader)
/// </summary>
/// <param name="cmdType">执行方式</param>
/// <param name="cmdText">SQL或者存储过程名称</param>
/// <param name="parameters">参数</param>
public IDataReader GetReader(CommandType cmdType, string cmdText, params DbParameter[] parameters) /// <summary>
/// 返回数据(DataSet)
/// </summary>
/// <param name="cmdType">执行方式</param>
/// <param name="cmdText">SQL或者存储过程名称</param>
/// <param name="parameters">参数</param>
public DataSet GetDataSet(CommandType cmdType, string cmdText, params DbParameter[] parameters) /// <summary>
/// 返回数据(DataTable)
/// </summary>
/// <param name="cmdType">执行方式</param>
/// <param name="cmdText">SQL或者存储过程名称</param>
/// <param name="parameters">参数</param>
public DataTable GetDataTable(CommandType cmdType, string cmdText, params DbParameter[] parameters)
CommandType cmdType:枚举,意为要使用哪种命令传输。
namespace System.Data
{
// 摘要:
// 指定如何解释命令字符串。
public enum CommandType
{
// 摘要:
// SQL 文本命令。(默认。)
Text = ,
//
// 摘要:
// 存储过程的名称。
StoredProcedure = ,
//
// 摘要:
// 表的名称。
TableDirect = ,
}
}
string cmdText:SQL语句,或者存储过程的名称。
params DbParameter[] parameters:参数列表 比如:
//最原始的方式。
using (DbExecutor db = new DbExecutor(DataBaseType.SqlServer, "User ID=sa;Password=123456;Pooling=true;Data Source=.;Initial Catalog=Farseer;", , System.Data.IsolationLevel.ReadCommitted))
{
// 执行插入的操作。
db.ExecuteNonQuery(System.Data.CommandType.Text, "insert into users(UserName,RoleID) Values('张三',0)");
// 操作完成后,记得要关闭,释放资源。 如果你像我这样使用了using 下面是可以不用执行的。如果没用,则必须加上。
db.Close(true);
}
上面DEMO,是做了一个插入的操作。ExecuteNonQuery 返回 “影响的行数” int 类型。 意思是数据库表中记录的影响行数。
// 利用DbFactory,创建了DbExecutor对象
// 第1个参数 0 代表的是数据库配置:DbConfig 的索引项。在:~/App_Data/Db.config 中
using (DbExecutor db = DbFactory.CreateDbExecutor(, System.Data.IsolationLevel.ReadCommitted))
{
// 执行插入的操作。
DataTable dt = db.GetDataTable(System.Data.CommandType.Text, "select * from users");
// 可以依赖扩展方法把DataTable 转成 List<User> 哦
List<Users> lst = dt.ToList<Users>();
// 操作完成后,记得要关闭,释放资源。 如果你像我这样使用了using 下面是可以不用执行的。如果没用,则必须加上。
db.Close(true);
}
上面DEMO中。使用GetDataTable方式,获取DataTable。框架对DataTable 提供了 转到 List 实体类的扩展方法哦。
// 利用Users泛型,创建了DbExecutor对象
// 会通过对Users缓存的反射结果,查询这个实体的数据库连接方式。(其实还是转到数据库配置索引项)
using (DbExecutor db = DbFactory.CreateDbExecutor<Users>(System.Data.IsolationLevel.ReadCommitted))
{
// 这里,我们用了一个新的类:SqlServerProvider 或者 DbProvider
// SqlServerProvider 继承在 DbProvider
var provider = new SqlServerProvider(); // 或者也可以用 DbFactory.CreateDbProvider 通过传入的Users 来判断你的数据库类型(有可能你的不是SqlServer)
// DbProvider 是用来为我们提供不同数据库的一些特性。比如下文中的创建数据库的参数,或者数据库的保护符号,或者参数符号的前缀。不同数据库的这些都是不一样的。
var provider = DbFactory.CreateDbProvider<Users>(); db.ExecuteNonQuery(System.Data.CommandType.Text, "update users set username = @userName where id = @id", provider.CreateDbParam("userName", "张三", DbType.String, ));
}
这种方式,采用了 参数的方式进行提交。可以避免 ASP当时最危险的漏洞:SQL注入
什么是DbProvider,我们先看下DbProvider的工作方式,如下图:
每个数据库类型都会包含有自己的Provider。 这个Provider主要是提供数据库的特有的特性。
举个例子,在Sqlserver中。对于表名、字段名的保护符号是:[] 中括号。为了避免一些名称定义成SQLSERVER特有的关键词,可以理解为是一种转义符。而MySql用的是: ‘’ 两个单引号。
怎么样?感觉是不是又回到了DbHelper的时代了。如果你担心ORM的性能慢,有这种强破症,你完全可以使用这种方式进行底层的访问。
按这种ORM性能的程度访问,可以分为三种:
完全使用ORM,返回List实体。
只使用ORM的操作,但返回DataTable数据。少了DataTable转到实体的性能消耗(非常昂贵的,貌似外文书都是这么翻译的)。
完全不使用。回到DbHelper方式。
以上三种方式都是支持的。
上一篇:Farseer.net轻量级开源框架中级篇: 事务的使用
下一篇:Farseer.net轻量级开源框架 中级篇: DbFactory数据工厂
QQ群:116228666 (Farseer.net开源框架交流) 请注明:Farseer.Net
Farseer.Net是一款ORM框架 + 常用工具 + 扩展集合。
Farseer 意为:先知、预言家 通常在某些场合时,提供计谋、策略。也希望该框架能给大家提供最大化的便捷。
ORM:其英文全称是:Object(对象) Relational(关系) Mapping(映射)
Farseer.Net的目标是:快速上手、快速开发、简单方便。
new User { ID = , Name = "张三" }.Insert()
Farseer.net轻量级开源框架 中级篇:执行SQL语句的更多相关文章
- Farseer.net轻量级开源框架 中级篇:SQL执行报告
导航 目 录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: 数据库切换 下一篇:Farseer.net轻量级开源框架 中级篇: 探究ORM(M ...
- Farseer.net轻量级开源框架 中级篇:探究ORM(Mapping)
导航 目 录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: SQL执行报告 下一篇:Farseer.net轻量级开源框架 中级篇: Cooki ...
- Farseer.net轻量级开源框架 中级篇:数据库切换
导航 目 录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: 动态数据库访问 下一篇:Farseer.net轻量级开源框架 中级篇: SQL执行 ...
- Farseer.net轻量级开源框架 中级篇:Cookies、Session、Request
导航 目 录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: 探究ORM(Mapping) 下一篇:Farseer.net轻量级开源框架 中级篇 ...
- Farseer.net轻量级开源框架 中级篇:常用的扩展方法
导航 目 录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: BasePage.BaseController.BaseHandler.BaseM ...
- Farseer.net轻量级开源框架 中级篇:事务的使用
导航 目 录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: Where条件的终极使用 下一篇:Farseer.net轻量级开源框架 中级篇: ...
- Farseer.net轻量级开源框架 中级篇:DbFactory数据工厂
导航 目 录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: 执行SQL语句 下一篇:Farseer.net轻量级开源框架 中级篇: 数据绑定 ...
- Farseer.net轻量级开源框架 中级篇:动态数据库访问
导航 目 录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: 自定义配置文件 下一篇:Farseer.net轻量级开源框架 中级篇: 数据库切换 ...
- Farseer.net轻量级开源框架 中级篇:UrlRewriter 地址重写
导航 目 录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: Cookies.Session.Request 下一篇:Farseer.net轻量 ...
随机推荐
- phpmywind教程:关于日期函数调用整理
近期群里一直在问phpmywind的日期函数怎么调用,今天抽出时间给大家整理出来. 以月/日格式显示: <?php echo MyDate('m-d', $row['posttime']); ? ...
- 【EasyUI】——可编辑的DataGrid
利用EasyUI做的可编辑的DataGrid大致分为两种类型.一种是启动行编辑的,一种是启动单元格编辑.且不说启动编辑的效果怎样.单启动编辑这一块它就封装的非常厉害.好些功能没有办法去更改.如今项目的 ...
- Unity 5.x 导入教学Demo
前言 小巫也来玩Unity3D了.以后会把学习的一些过程博客记录下来,方大家也方便自己学习和查看.本篇博客介绍怎样在Unityclient中导入Assert Store中下载的项目资源,方便我们进一步 ...
- 算法基础:正整数指定规则排序问题(Golang实现)
给定字符串内有非常多正整数,要求对这些正整数进行排序.然后返回排序后指定位置的正整数 排序要求:依照每一个正整数的后三位数字组成的整数进行从小到大排序 1)假设不足三位,则依照实际位数组成的整数进行比 ...
- js 对有“命名空间”的表单做深度解析
问题描写叙述:一个大表单中,可能包括几十个字段.这些字段在数据库中的映射非常可能不在一张表中,为了降低后台操作的工作量,我们应该在前台提交的时候对数据做初步处理. 举例说明: watermark/2/ ...
- centOS的联网问题
centOS连接了一个下午,没连上网络,隔了两天,又试了一下午才把网连上,一直查centOS的网络连接问题都搞不定,最后还是问了朋友怎么给虚拟机联网谈到虚拟网卡的问题.建议可以看看网络适配器,VMwa ...
- Android学习笔记-tween动画之xml实现
继上篇tween动画的java实现:http://www.cnblogs.com/fengtengfei/p/3957800.html, 这里我接着介绍一下tween动画的xml实现的方法, 首先 ...
- YTU 2622: B 虚拟继承(虚基类)-沙发床(改错题)
2622: B 虚拟继承(虚基类)-沙发床(改错题) 时间限制: 1 Sec 内存限制: 128 MB 提交: 487 解决: 393 题目描述 有一种特殊的床,既能当床(Bed)用又能当沙发(S ...
- Oracle 游标使用总结(好文章)
游标(CURSOR)也叫光标,在关系数据库中经常使用,在PL/SQL程序中可以用CURSOR与SELECT一起对表或者视图中的数据进行查询并逐行读取. Oracle游标分为显示游标和隐式游标. 显示游 ...
- hdu 4777 Queue
题目大意: 一些人,每个人的身高都是不一样的 然后再给你一个k,表示这个人的左边或者右边,有k个人比他高 然后让你构造一个满足条件且字典序最小的序列 思路: 按照权值排序 这样每次加进去后只有后面的才 ...