EF怎么获取SQL存储过程的output或return的值

问题描述

我调的一个分页的存储过程,代码如下:ALTERPROCEDURE[dbo].[sp_Page]/****************************************************************参数说明:1.Tables:表名称,视图,多表查询可用视图做2.PrimaryKey:主关键字3.Sort:排序语句,不带OrderBy比如:NewsIDDesc,OrderRowsAsc4.CurrentPage:当前页码5.PageSize:分页尺寸6.Fields:查询字段,默认为*6.Filter:过滤语句,不带Where7.Group:Group语句,不带GroupBy***************************************************************/(@Tablesvarchar(1000),@PrimaryKeyvarchar(100),@Sortvarchar(200)=NULL,@CurrentPageint=1,@PageSizeint=10,@Fieldsvarchar(1000)='*',@Filtervarchar(1000)=NULL,@Groupvarchar(1000)=NULL--@TotalRecordCountintoutput)AS/*默认排序*/IF@SortISNULLOR@Sort=''SET@Sort=@PrimaryKeyDECLARE@SortTablevarchar(100)DECLARE@SortNamevarchar(100)DECLARE@strSortColumnvarchar(200)DECLARE@operatorchar(2)DECLARE@typevarchar(100)DECLARE@precintDECLARE@sqlnvarchar(1000)DECLARE@paramDefinenvarchar(100)DECLARE@TotalRecordCountint/********************数据表中总记录数***********************/SET@sql='SELECT@TotalRecordCount=COUNT(*)FROM'+@Tables+'WHERE1=1'IF@FilterISNOTNULLAND@Filter<>''SET@sql=@sql+'AND'+@FilterSET@paramDefine='@TotalRecordCountINTOUTPUT'EXECSP_EXECUTESQL@sql,@paramDefine,@TotalRecordCountOUTPUT/*************************************************************//*设定排序语句.*/IFCHARINDEX('DESC',@Sort)>0BEGINSET@strSortColumn=REPLACE(@Sort,'DESC','')SET@operator='<='ENDELSEBEGINIFCHARINDEX('ASC',@Sort)=0SET@strSortColumn=REPLACE(@Sort,'ASC','')SET@operator='>='ENDIFCHARINDEX('.',@strSortColumn)>0BEGINSET@SortTable=SUBSTRING(@strSortColumn,0,CHARINDEX('.',@strSortColumn))SET@SortName=SUBSTRING(@strSortColumn,CHARINDEX('.',@strSortColumn)+1,LEN(@strSortColumn))ENDELSEBEGINSET@SortTable=@TablesSET@SortName=@strSortColumnENDSELECT@type=t.name,@prec=c.precFROMsysobjectsoJOINsyscolumnscono.id=c.idJOINsystypestonc.xusertype=t.xusertypeWHEREo.name=@SortTableANDc.name=@SortNameIFCHARINDEX('char',@type)>0SET@type=@type+'('+CAST(@precASvarchar)+')'DECLARE@strPageSizevarchar(50)DECLARE@strStartRowvarchar(50)DECLARE@strFiltervarchar(1000)DECLARE@strSimpleFiltervarchar(1000)DECLARE@strGroupvarchar(1000)/*默认当前页*/IF@CurrentPage<1SET@CurrentPage=1/*设置分页参数.*/SET@strPageSize=CAST(@PageSizeASvarchar(50))SET@strStartRow=CAST(((@CurrentPage-1)*@PageSize+1)ASvarchar(50))/*筛选以及分组语句.*/IF@FilterISNOTNULLAND@Filter!=''BEGINSET@strFilter='WHERE'+@Filter+''SET@strSimpleFilter='AND'+@Filter+''ENDELSEBEGINSET@strSimpleFilter=''SET@strFilter=''ENDIF@GroupISNOTNULLAND@Group!=''SET@strGroup='GROUPBY'+@Group+''ELSESET@strGroup=''/*执行查询语句*/EXEC('DECLARE@SortColumn'+@type+'SETROWCOUNT'+@strStartRow+'SELECT@SortColumn='+@strSortColumn+'FROM'+@Tables+@strFilter+''+@strGroup+'ORDERBY'+@Sort+'SETROWCOUNT'+@strPageSize+'SELECT'+@Fields+'FROM'+@Tables+'WHERE'+@strSortColumn+@operator+'@SortColumn'+@strSimpleFilter+''+@strGroup+'ORDERBY'+@Sort+'')return@TotalRecordCountGO在CS文件里调用代码如下:DBConndb=newDBConn();SqlParameter[]uiPage=newSqlParameter[8];uiPage[0]=newSqlParameter("@Tables","userInfo");uiPage[1]=newSqlParameter("@PrimaryKey","userID");uiPage[2]=newSqlParameter("@Sort","userID");uiPage[3]=newSqlParameter("@CurrentPage",page);uiPage[4]=newSqlParameter("@PageSize",columnsMax);uiPage[5]=newSqlParameter("@Fields","*");uiPage[6]=newSqlParameter("@Filter","delFlag=0");uiPage[7]=newSqlParameter("@TotalRecordCount",0);uiPage[7].Direction=System.Data.ParameterDirection.ReturnValue;varUlist=db.userInfo.SqlQuery("execsp_Page@Tables,@PrimaryKey,@Sort,@CurrentPage,@PageSize,@Fields,@Filter,@Group",uiPage).ToList();totalcolumns=int.Parse(uiPage[8].Value.ToString());rpList.DataSource=Ulist;rpList.DataBind();数据列表获取和显示都正常,但是记录总数取不到,哪位大神帮忙看看,感谢。

解决方案

解决方案二:
param=newSqlParameter("@RETURN",SqlDbType.Int);param.Direction=ParameterDirection.ReturnValue;foreach(SqlParameterparamincmd.Parameters){if(param.Direction==ParameterDirection.ReturnValue){r=param.Value;}}这样肯定能获取到吧
解决方案三:
按照你的习惯、为什么不用ADO呢?如果用EFDBFirst、存储过程直接就可以'点'出来、代码生成器帮你做好了、甚至返回值的类型都给你定义好了
解决方案四:
直接执行存储过程,然后返回输出参数值

时间: 2024-10-07 00:04:30

EF怎么获取SQL存储过程的output或return的值的相关文章

小弟不才!又来问问题了!请问LINQ to SQL 怎么样获取SQL 存储过程的多个结果集!!!!!!!!

问题描述 如题,大虾米赐教! 解决方案 解决方案二:IMultipleResults

虚心请教,ASP.NET存储过程读取output跟return的问题

问题描述 废话不说了,近期训练存储过程,问题如下-----存储过程如下:/*@inputName:检验用户@txtresult:输出参数值/*CREATEPROCEDUREsp_checkAdmin@inputNamevarchar,@txtresultvarcharoutputAS--SETNOCOUNTONif@inputNameisNULLbeginset@txtresult='未输入数据'return3--未输入数据endelseif(selectcount(admin)fromadmi

C#调用SQL中的存储过程中有output参数,存储过程执行过程中返回信息

  C#调用SQL中的存储过程中有output参数,类型是字符型的时候一定要指定参数的长度.不然获取到的结果总是只有第一字符.本人就是由于这个原因,折腾了很久.在此记录一下,供大家以后参考! 例如: CREATE PROCEDURE sp_AccountRole_Create @CategoryID int, @RoleName nvarchar(10), @Description nvarchar(50), @RoleID int output AS DECLARE @Count int --

sqlserver-如何获取SQL SERVER 2008 存储过程参数默认值

问题描述 如何获取SQL SERVER 2008 存储过程参数默认值 比如我的存储过程创建语句如下: CREATE PROC [dbo].[SearchBillDetail] ( @OpBeginDate DATETIME , @OpEndDate DATETIME , @BillTypeID INT , @BillOperType INT , @SaleOperID INT = 1, @DrCompID INT = NULL ) AS SET NOCOUNT ON -- 后面省略 这是我需要通

c#-C#程序调用SQL SERVER存储过程的output参数始终为空,求助?

问题描述 C#程序调用SQL SERVER存储过程的output参数始终为空,求助? C#中的如下两条语句调用存储过程output参数始终为空(dataGridView1能正确调用到想要的select数据,但是存储过程的两个输出参数值不能传递给两个texBox.Text),不知为何?textBox1.Text = parameters[2].Value.ToString();textBox2.Text = nowpage + ""/"" + parameters[3

使用SQL存储过程要特别注意的问题-注意顺序读取

存储过程|问题     存储过程是一个运行于SQL数据库之中最核心的事务,它通过长驻内存的形式,进行读取\处理\写入最为频繁处理的数据.     ASP虽然在微软的ASPX的侵袭下,仍旧是中小企业继续在用的一种网页语言,但是当要读取海量数据的时候,如果仍旧使用普通的SQL进行读取运行与写入,将导致系统资源的严重浪费,所以我们在ASP中使用存储过程,以提高数据的存取速度,同时通过SQL核心的获取数据的方法,可以有效的减少垃圾数据(不被立即使用,而且也不备较短的时间里被使用的数据)操作.     在

关于SQL 存储过程入门基础(基础知识)_MsSql

大学里面对存储过程没有讲到什么,工作了一段时间,对存储过程还是没有用到,根本不需要去写存储过程,可能是做的软件方向的原因吧.为了以后发展,决定从零开始学习下. 这里看看存储过程的定义, 存储过程(Stored Procedure),是一组为了完成特定功能的SQL 语句,集经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数,如果该存储过程带有参数来执行. 在SQL Server 的系列版本中,存储过程分为两类:系统提供的存储过程和用户自定义存储过程. 系统SP,主要存储master 数据

sql存储过程详解_MsSql

1,不带参数的存储过程 2,带输入参数的存储过程 3,带输入和输出参数的存储过程 4,带返回值的存储过程 不带参数的存储过程 例如,以下存储过程返回Employees表中所有职员的记录. 存储过程代码: USE TSQLFundamentals2008; GO IF OBJECT_ID('usp_ProcDemoNoParam','P') IS NOT NULL DROP PROC usp_ProcDemoNoParam; GO -- 1,不带参数 CREATE PROC usp_ProcDem

通用SQL存储过程分页以及asp.net后台调用的方法_Mysql

创建表格并添加300万数据 use Stored CREATE TABLE UserInfo( --创建表 id int IDENTITY(1,1) PRIMARY KEY not null,--添加主键和标识列 UserName varchar(50) ) declare @i int --添加3百万数据,大概4分钟时间 set @i=1 while @i<3000000 begin insert into UserInfo (UserName) values(@i) set @i=@i+1