之前没有用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

最新文章

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

热门文章

  1. RDLC 聚合函数按条件求和,显示&quot;错误号&quot;
  2. MiniUI学习笔记1
  3. iOS9新特性之UIStackView
  4. C#自定义的命名空间引用
  5. _CrtMemBlockHeader
  6. 实现html元素跟随touchmove事件的event.touches[0].clientX移动
  7. jquery mobile touch 实例
  8. 项目中redis类似MVC的使用
  9. jsonp跨域请求学习笔记
  10. production stage