你使用PetaPoco必须知道的事情
之前没有用PetaPoco调用过存储过程,今天发现问题
Sql sql = ); var list = sqlserverDB.GetInstance().Fetch<AdminGroup>(sql); foreach (var adminGroup in list) { Console.WriteLine(adminGroup.GroupName); } Console.WriteLine("--------------------------------------"); Sql sql1 = );//和上面相比就EXCUTE变成了简写 var list1 = sqlserverDB.GetInstance().Fetch<AdminGroup>(sql1); foreach (var adminGroup in list1) { Console.WriteLine(adminGroup.GroupName); }
在sql server查询一样的语句,结果在程序中竟然不一样...
存储过程:
CREATE PROCEDURE GetAdminGroup @groupId int AS BEGIN SELECT * FROM dbo.AdminGroup WHERE GroupId>@groupId END GO
经过检查,发现在下面的那个list1组装sql的时候sql变成了
public IEnumerable<T> Query<T>(string sql, params object[] args) { if (EnableAutoSelect) sql = AddSelectClause<T>(sql);//在这个方法里面重新编写了sql ......... }
经过排查,终于发现正则 rxSelect 里面没有匹配exec
Regex rxSelect = new Regex(@"\A\s*(SELECT|EXECUTE|CALL)\s", RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Multiline); Regex rxFrom = new Regex(@"\A\s*FROM\s", RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Multiline); string AddSelectClause<T>(string sql) { if (sql.StartsWith(";")) ); if (!rxSelect.IsMatch(sql))//没有匹配exec, { var pd = PocoData.ForType(typeof(T)); var tableName = EscapeTableName(pd.TableInfo.TableName); string cols = string.Join(", ", (from c in pd.QueryColumns select tableName + "." + EscapeSqlIdentifier(c)).ToArray()); if (!rxFrom.IsMatch(sql)) sql = string.Format("SELECT {0} FROM {1} {2}", cols, tableName, sql);//自动生成了sql并且加在前面 else sql = string.Format("SELECT {0} {1}", cols, sql); } return sql; }
解决方法:需要将PetaPoco.cs 第 583行修改加上 |exec
你使用PetaPoco必须知道的事情的更多相关文章
- PetaPojo —— JAVA版的PetaPoco
背景 由于工作的一些原因,需要从C#转成JAVA.之前PetaPoco用得真是非常舒服,在学习JAVA的过程中熟悉了一下JAVA的数据组件: MyBatis 非常流行,代码生成也很成熟,性能也很好.但 ...
- 【译】微型ORM:PetaPoco【不完整的翻译】
PetaPoco是一款适用于.Net 和Mono的微小.快速.单文件的微型ORM. PetaPoco有以下特色: 微小,没有依赖项……单个的C#文件可以方便的添加到任何项目中. 工作于严格的没有装饰的 ...
- 权限设计实现(MVC4+Bootstrap+ PetaPoco+Spring.Net)
权限设计实现(MVC4+Bootstrap+ PetaPoco+Spring.Net) 一.前言 至毕业后一直在做企业Web开发,做过的项目也有不少,每个项目的框架设计都不是一样,但是每个项目的权限模 ...
- 【译】微型ORM:PetaPoco
PetaPoco是一款适用于.Net 和Mono的微小.快速.单文件的微型ORM. PetaPoco有以下特色: 微小,没有依赖项……单个的C#文件可以方便的添加到任何项目中. 工作于严格的没有装饰的 ...
- 【译】微型ORM:PetaPoco【不完整的翻译】(转)
出处:http://www.cnblogs.com/youring2/archive/2012/06/04/2532130.html PetaPoco是一款适用于.Net 和Mono的微小.快速.单文 ...
- mono for android中使用dapper或petapoco对sqlite进行数据操作
在mono for android中使用dapper或petapoco,很简单,新建android 类库项目,直接把原来的文件复制过来,对Connection连接报错部分进行注释和修改就可以运行了.( ...
- ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库
前段时间在园子里看到了小蝶惊鸿 发布的有关绿色版的Linux.NET——“Jws.Mono”.由于我对.Net程序跑在Linux上非常感兴趣,自己也看了一些有关mono的资料,但是一直没有时间抽出时间 ...
- 【原】Bootstrap+Knockout.JS+ASP.Net MVC3+PetaPOCO实现CRUD操作
1.需求: 1.1)页面要美观大气 1.2)前端代码要简洁清晰,要用MVC或是MVVM框架 1.3)服务端要用MVC框架,要Rest风格 1.4)数据访问要用ORM 2.效果: 2.1)列表 2.2) ...
- 轻量级ORM框架初探-Dapper与PetaPoco的基本使用
一.EntityFramework EF是传统的ORM框架,也是一个比较重量级的ORM框架.这里仍然使用EF的原因在于为了突出轻量级ORM框架的性能,所谓有对比才有更优的选择. 1.1 准备一张数据库 ...
随机推荐
- taglib的使用
使用自定义的taglib可以是我们对页面数据的处理放在后台,不仅使用方便,而且影藏了处理逻辑,也更加的安全. 需要使用到servlet.jar 1.在web-inf下建立taglib.tld文件 &l ...
- 关于动态SQL中的NULL
declare v_sql ); v_c1 number; v_c2 number; begin v_c2 :; v_sql := 'begin '; v_sql := v_sql||'update ...
- ORACLE之SQL语句内部解析过程【weber出品】
一.客户端通过监听连接到数据库,数据库开启一个server process进程来接收客户端传过来的sql. 1.这条sql语句从来都没有被执行过.(硬解析) 2.这条sql语句被执行过.(软解析) 二 ...
- ios9基础知识总结(foundation)笔记
类:NSObject .NSString.NSMutableString.NSNumber.NSValue.NSDate.NSDateFormatter.NSRange.Collections:NSS ...
- angularjs使用ng-messages-include实例
<!DOCTYPE html> <html lang="zh-CN" ng-app="app"> <head> <me ...
- Guava 15新特性介绍
原文:http://www.javacodegeeks.com/2013/10/guava-15-new-features.html Guava 是众所周知的google出品的开源工具包,十分好用,本 ...
- linux 输入输出重定向
输入输出重定向 1,输入输出重定向,是针对过滤器的,不针对,编辑器和交互工具 2,>号只把正确的标准输出重定向,输出错误信息,可以用2> 3,新建或清空文件可以直接用>filenam ...
- Decimal:解决0.3 != 0.1+0.1+0.1的方法(十进制浮点数)
0.普通情况 1.引入Decimal 也可以这样引入: from decimal import Decimal as D 相当于: from decimal import Decimal D = De ...
- Java学习笔记--String StringBuffer StringBuilder
String StringBuffer StringBuilder String http://docs.oracle.com/javase/7/docs/api/ 中文: http://www.cn ...
- Visual Studio中的lib的链接顺序
描述:如果有一个exe工程,它依赖于A.lib,B.lib,A.lib和B.DLL我同样有他们的源码工程.依赖顺序是这样的exe->A.lib->B.DLL.那么如果我改动了B的源码,编译 ...