zoukankan      html  css  js  c++  java
  • 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

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

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

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

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

    1 new User { ID = 1, Name = "张三" }.Insert()
  • 相关阅读:
    OnEraseBkgnd、OnPaint与画面重绘
    .编译ADO类DLL时报错的解决方案
    VC列表框样式
    Codeforces 131D. Subway 寻找环树的最短路径
    Codeforces 103B. Cthulhu 寻找奈亚子
    Codeforces 246D. Colorful Graph
    Codeforces 278C. Learning Languages 图的遍历
    Codeforces 217A. Ice Skating 搜索
    Codeforces 107A. Dorm Water Supply 搜图
    Codeforces 263 D. Cycle in Graph 环
  • 原文地址:https://www.cnblogs.com/steden/p/4078518.html
Copyright © 2011-2022 走看看