你使用PetaPoco必须知道的事情
2024-09-25 13:35:54
之前没有用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
最新文章
- ASP.NET MVC Controllers and Actions
- XMPP框架下微信项目总结(2)授权登陆/注销/注册/打印日志
- C# 我理解的接口、抽象类、以及事件
- App开发者必备的运营、原型、UI设计工具整理
- python解析xml模块封装代码
- linux修改挂载目录
- 算法导论(第三版)Problems2(归并插入排序、数列逆序计算)
- C++11多线程std::thread的简单使用
- jquery 全选 全不选 事件绑定
- Apache自带 ab压测工具 Windows配置使用说明 - 随笔记录
- vscode里使用.vue代码模板的方法
- 聊聊微服务熔断降级Hystrix
- java源码中的注解
- android highcharts 柱状图例子
- Mac OSX上卸载Anaconda
- [转载]Oracle中的NVL函数
- TL认证和运作经典案例评选
- Mac office ppt无法正常输入文字的问题解决方案
- poj1611 The Suspects(并查集)
- Opentsdb简介(一)