zoukankan      html  css  js  c++  java
  • Linq不能使用CLR Stored Procedure返回ISingleResult

    使用C#写CLR存储过程确实很方便。
    不过遗憾的是,如果CLR里通过SqlContext.Pipe.Send()返回Select结果的话,并不能被Linq to SQL自动识别而返回ISingleResult的。(因为部署CLR存储过程实际产生的代码是不包含select语句的)
    换句话说,所有CLR存储过程的返回值在Linq to SQL里都会被当成int。
    解决办法:
    1)如果该存储过程没有out的参数,比较好办:使用ExecuteQuery并EXEC 存储过程
    如:
    var query = DataContext.ExecuteQuery(“EXEC P_LoadUserWithTraining @trainingId={0}”, id).Single();
    这种方法能取到结果,但是没有办法获得out参数。

    2)如果该存储过程又有out的参数需要获得值,又返回select结果集的:
    非常麻烦,只能部署CLR存储过程前,先手动在数据库里create procedure(同名,里面填上参数和select语句),
    然后骗取Linq to SQL生成返回ISingleResult的代码,然后drop procedure,再部署CLR存储过程。
    否则,即使把返回int的代码手动改成返回ISingleResult的,也会报错。我这里一直报 ArgumentOutOfRangeException
    所以针对这种存储过程,最好还是T-SQL语句写。CLR的反而好麻烦。

  • 相关阅读:
    专业的户外直播视频传输系统是如何搭建起来的?通过GB28181协议建立的户外直播方案
    Go-注释
    语言的动态性和静态性
    程序&命名-执行环境
    Go-错误栈信息
    Mongo-文档主键-ObjectId
    Mongo-关系型VS非关系型
    数据-CRUD
    Mongo基本操作
    mongo环境搭建
  • 原文地址:https://www.cnblogs.com/shihao/p/2320560.html
Copyright © 2011-2022 走看看