|zyciis| 为什么我的这条存储过程返回不了记录数 谢谢

问题描述

CREATEPROCsp_PageView@tbnamesysname,--要分页显示的表名@FieldKeynvarchar(1000),--用于定位记录的主键(惟一键)字段,可以是逗号分隔的多个字段@PageCurrentint=1,--要显示的页码@PageSizeint=10,--每页的大小(记录数)@FieldShownvarchar(1000)='',--以逗号分隔的要显示的字段列表,如果不指定,则显示所有字段@FieldOrdernvarchar(1000)='',--以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC--用于指定排序顺序@Wherenvarchar(1000)='',--查询条件@PageCountintOUTPUT--总页数ASSETNOCOUNTON--检查对象是否有效IFOBJECT_ID(@tbname)ISNULLBEGINRAISERROR(N'对象"%s"不存在',1,16,@tbname)RETURNENDIFOBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTable')=0ANDOBJECTPROPERTY(OBJECT_ID(@tbname),N'IsView')=0ANDOBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTableFunction')=0BEGINRAISERROR(N'"%s"不是表、视图或者表值函数',1,16,@tbname)RETURNEND--分页字段检查IFISNULL(@FieldKey,N'')=''BEGINRAISERROR(N'分页处理需要主键(或者惟一键)',1,16)RETURNEND--其他参数检查及规范IFISNULL(@PageCurrent,0)<1SET@PageCurrent=1IFISNULL(@PageSize,0)<1SET@PageSize=10IFISNULL(@FieldShow,N'')=N''SET@FieldShow=N'*'IFISNULL(@FieldOrder,N'')=N''SET@FieldOrder=N''ELSESET@FieldOrder=N'ORDERBY'+LTRIM(@FieldOrder)IFISNULL(@Where,N'')=N''SET@Where=N''ELSESET@Where=N'WHERE('+@Where+N')'--如果@PageCount为NULL值,则计算总页数(这样设计可以只在第一次计算总页数,以后调用时,把总页数传回给存储过程,避免再次计算总页数,对于不想计算总页数的处理而言,可以给@PageCount赋值)IF@PageCountISNULLBEGINDECLARE@sqlnvarchar(4000)SET@sql=N'SELECT@PageCount=COUNT(*)'+N'FROM'+@tbname+N''+@WhereEXECsp_executesql@sql,N'@PageCountintOUTPUT',@PageCountOUTPUTSET@PageCount=(@PageCount+@PageSize-1)/@PageSizeEND--计算分页显示的TOPN值DECLARE@TopNvarchar(20),@TopN1varchar(20)SELECT@TopN=@PageSize,@TopN1=(@PageCurrent-1)*@PageSize--第一页直接显示IF@PageCurrent=1EXEC(N'SELECTTOP'+@TopN+N''+@FieldShow+N'FROM'+@tbname+N''+@Where+N''+@FieldOrder)ELSEBEGIN--处理别名IF@FieldShow=N'*'SET@FieldShow=N'a.*'--生成主键(惟一键)处理条件DECLARE@Where1nvarchar(4000),@Where2nvarchar(4000),@snvarchar(1000),@FieldsysnameSELECT@Where1=N'',@Where2=N'',@s=@FieldKeyWHILECHARINDEX(N',',@s)>0SELECT@Field=LEFT(@s,CHARINDEX(N',',@s)-1),@s=STUFF(@s,1,CHARINDEX(N',',@s),N''),@Where1=@Where1+N'ANDa.'+@Field+N'=b.'+@Field,@Where2=@Where2+N'ANDb.'+@Field+N'ISNULL',@Where=REPLACE(@Where,@Field,N'a.'+@Field),@FieldOrder=REPLACE(@FieldOrder,@Field,N'a.'+@Field),@FieldShow=REPLACE(@FieldShow,@Field,N'a.'+@Field)SELECT@Where=REPLACE(@Where,@s,N'a.'+@s),@FieldOrder=REPLACE(@FieldOrder,@s,N'a.'+@s),@FieldShow=REPLACE(@FieldShow,@s,N'a.'+@s),@Where1=STUFF(@Where1+N'ANDa.'+@s+N'=b.'+@s,1,5,N''),@Where2=CASEWHEN@Where=''THENN'WHERE('ELSE@Where+N'AND('END+N'b.'+@s+N'ISNULL'+@Where2+N')'--执行查询EXEC(N'SELECTTOP'+@TopN+N''+@FieldShow+N'FROM'+@tbname+N'aLEFTJOIN(SELECTTOP'+@TopN1+N''+@FieldKey+N'FROM'+@tbname+N'a'+@Where+N''+@FieldOrder+N')bON'+@Where1+N''+@Where2+N''+@FieldOrder)END

EDbOperatoroo=newEDbOperator();oo.DbOperator.IsStoredProcedure=true;oo.DbOperator.Parameters.Clear();oo.DbOperator.Parameters.Add(MyParameter.Sql("@tbname",ParameterDbType.VarChar,200,ParameterDirection.Input,TableName));oo.DbOperator.Parameters.Add(MyParameter.Sql("@FieldShow",ParameterDbType.VarChar,2000,ParameterDirection.Input,FieldList));oo.DbOperator.Parameters.Add(MyParameter.Sql("@FieldKey",ParameterDbType.VarChar,100,ParameterDirection.Input,PrimaryKey));oo.DbOperator.Parameters.Add(MyParameter.Sql("@Where",ParameterDbType.VarChar,1000,ParameterDirection.Input,iWhere.ToString()));oo.DbOperator.Parameters.Add(MyParameter.Sql("@FieldOrder",ParameterDbType.VarChar,1000,ParameterDirection.Input,Order));oo.DbOperator.Parameters.Add(MyParameter.Sql("@PageSize",ParameterDbType.Int,4,ParameterDirection.Input,PageSize));oo.DbOperator.Parameters.Add(MyParameter.Sql("@PageCurrent",ParameterDbType.Int,4,ParameterDirection.Input,PageIndex));System.Data.SqlClient.SqlParameterpram=newSystem.Data.SqlClient.SqlParameter("@PageCount",SqlDbType.Int,4);pram.Direction=ParameterDirection.Output;oo.DbOperator.Parameters.Add(pram);DataSetds=newDataSet();oo.DbOperator.ExecDataSet("sp_PageView",ds);System.Data.SqlClient.SqlParameterpr=(System.Data.SqlClient.SqlParameter)oo.DbOperator.Parameters[7];RecordCount=Convert.ToInt32(pr.Value);returnds.Tables[0];

取得的总记录数都为null呢我得不了记录总数啊谢谢

解决方案

解决方案二:
在数据库中执行这个存储过程是否正常?
解决方案三:
学习
解决方案四:
up
解决方案五:
--执行查询EXEC(N'SELECTTOP'+@TopN+N''+@FieldShow+N'FROM'+@tbname+N'aLEFTJOIN(SELECTTOP'+@TopN1+N''+@FieldKey+N'FROM'+@tbname+N'a'+@Where+N''+@FieldOrder+N')bON'+@Where1+N''+@Where2+N''+@FieldOrder)首先用printf(N'SELECTTOP'+@TopN+N''+@FieldShow+N'FROM'+@tbname+N'aLEFTJOIN(SELECTTOP'+@TopN1+N''+@FieldKey+N'FROM'+@tbname+N'a'+@Where+N''+@FieldOrder+N')bON'+@Where1+N''+@Where2+N''+@FieldOrder)看看sql是不是有问题.或者直接执行一下,看看存储过程本身是不是能work.保证了上面的步骤没有问题,再检查你的code.请先自己尝试找小原因,这样比直接问别人,更能提高.
解决方案六:
测试存储过程,检查pram的值RecordCount=Convert.ToInt32(pram.Value);

解决方案七:
执行存储过程没有问题吧?
解决方案八:
ds.tables(0).rows.count就是记录数了
解决方案九:
ds.tables(0).rows.count就是记录数了这个只是测试到返回的数量

时间: 2024-08-18 00:34:19

|zyciis| 为什么我的这条存储过程返回不了记录数 谢谢的相关文章

ADO 调用存储过程返回多个记录集的问题(关于存储过程内Set NoCount On的作用)

  最近在 CSDN 上回答了好几个网友大致相同的问题 http://community.csdn.net/Expert/TopicView.asp?id=4131244 http://community.csdn.net/Expert/TopicView.asp?id=4156955 大致都是问:为什么没有返回数据集或将记录集赋给表格控件出错 产生问题的原因大致有几个 1.不清楚 ADO.Connection.Execute 的返回机制,所有使用该方法返回的记录集都是只读,仅向前游标的 所以赋

返回多个记录集的存储过程-ASP调用存储过程

存储过程|记录集 本文最先介绍的是返回记录集的存储过程.有时候,需要一个存储过程返回多个记录集,在ASP中,如何同时取得这些记录集呢?为了说明这一问题,在userinfo表中增加两个字段:usertel及usermail,并设定只有登录用户可以查看这两项内容. /*SP7*/CREATE PROCEDURE dbo.getUserInfo@userid int,@checklogin bitasset nocount onbeginif @userid is null or @checklogi

记录数-关于存储过程和Oracle对表的查询

问题描述 关于存储过程和Oracle对表的查询 查询sys用户下的所有表,将表内记录数大于2条的表名和记录数记录到table_name_and_cont_bak表中 count字段内. 查询table_name_and_cont_bak,将里面表名重复的,并且没有count字段的记录删除.

实现linq存储过程返回多条结果集

曾经被linq存储过程返回多个结果所困扰,今晚加班,问题解决,分享一下思路: linq存储过程默认生成的代码是ISingleResult的,也就是只能返回一条结果集,我们先动手脚,将其改 成IMultipleResults 的.实体类根据不同情况更改. linq存储过程更改前: [Function(Name="dbo.MeterTaskStat")] public ISingleResult<XXXX> MeterTaskStat ([Parameter(Name=&quo

如何在Delphi中调用oracle的存储过程返回数据集

oracle|存储过程|数据 选自CSDN http://search.csdn.net/Expert/topic/2280/2280860.xml?temp=2.169436E-02 论坛中JCC0128 网友的发言 [delphi+oracle报表解决方案(一)]delphi中调用oracle的存储过程(分带返回游标,不返回值两种)  关键字: delphi ,oracle存储过程,游标,返回数据集,报表 注:delphi 6+ oracle 8.1.6 一.创建包与包体 1.附:建表aac

使用VB调用Oracle程序包内的存储过程返回结果集

oracle|程序|存储过程        在实际的项目开发中我们需要通过VB(或其他语言工具)调用Oracle程序包内的存储过程返回结果集.这里以短信运营平台中的一个调用为例来说明这个过程,希望对你有所帮助. --一.使用SQL*Plus创建以下项目:--1.建表("OW_SMP"为方案名称,下同) CREATE TABLE "OW_SMP"."SM_Send_SM_List"(    SerialNo INT  PRIMARY KEY,  -

mybatis-如何通过MyBatis获取mysql存储过程返回的不确定个数的多个结果集?

问题描述 如何通过MyBatis获取mysql存储过程返回的不确定个数的多个结果集? (网上搜到的案例,都是固定个数的多个结果集的场景,比如这种:http://www.iteye.com/problems/78259 .**请注意,我的问题与此不同**.) 我需要返回不确定个数个结果集.MySQL存储过程形如: while(i <= n + 1) do select * from t_tab t where t.a = i limit 020;end while 其中,**n是外部传入的.结果集

oracle11g-vs2012调用oracle存储过程返回输出字符串的值的问题

问题描述 vs2012调用oracle存储过程返回输出字符串的值的问题 vs2012调用oracle存储过程返回输出字符串的值的问题,在plsql中执行存储过程是没有问题的,输出的字符串也有值,但在vs中取输出参数的值时,此字符串的值为null,但 如果输出为整数,则可以得到返回值. 解决方案 贴出你的代码看看.你的参数传的对不对 解决方案二: OracleConnection conn = new OracleConnection(connstr); conn.Open(); OracleCo

一个通过Oracle8i存储过程,返回记录集的程序包(存储过程)

oracle|程序|存储过程|记录集 提示:在Oracle8i中,如果需要通过存储过程返回结果集, 需要使用游标! CREATE OR REPLACE  PACKAGE BODY "SMS_PAY"."SMSMAINT"                                                                               IS  --功能描述:查询代理银行交易流水信息 writer: wang haibo 200