finereport报表,使用带参数的sql存储过程,报没有返回数据集的错

原因:在SqlServer数据库中,若定义的存储过程中包含有insert/update等更新操作时,在设计器中对存储过程进行调用时,会提示没有返回数据集的错误。

解决方法:修改存储过程,在begin 后面添加 SET NOCOUNT ON。

不管多复杂的sql存储过程 只需要在第一个大的begin后面添加 如下:

ALTER proc [dbo].[proc_enterylist] @qybm varchar(50),@strWhere varchar(2000)=‘‘,@stratrow int,@pagesize int ,@total int out
as
begin
       SET NOCOUNT ON /*在此处添加*/
	 declare @fcompnbr varchar(50)
     --如果传进来的是[FCompanyId] ,则取   太乱。
	 if exists(select 1 from [QY_JBXX] where [FCompanyId] = @qybm)  --如果传进来的是[FCompanyId] ,则取   太乱。
	 begin
	     select @fcompnbr = @qybm
	 end
	 --结束
	 else
	 begin
	    select @fcompnbr = FCompanyId from [dbo].[QY_JBXX] where QYBM = @qybm
	 end

     create table #b(fnumber int ,fname varchar(200),forder dec(10,4) ,ftype varchar(50))

	 create table #t(id int identity,xm varchar(200) null,sfzh varchar(50) null,XB varchar(10) null,zslx varchar(200) null,zslxname varchar(2000) null,zsjb varchar(100) null,
	                zczsh varchar(100) null,zczy varchar(100) null,zsyxqjssj datetime null,fzsj datetime null,fzjg varchar(200) null,forder int null,rowspan int null,showname int null,showid int null)

	insert into #b
    select distinct fnumber,fname,forder,FType from CF_Dic_Person
	 where ftype =‘zcrylx‘ order by forder

	insert into #b
    select distinct fnumber,fname,forder/100,FType from CF_Dic_Person a
	 where ftype =‘qtlbry‘ and not exists(select 1 from #b b where a.fnumber = b.fnumber) 

    update #b set forder = 5000 where fnumber=407

    if (@strWhere=‘‘)
    begin

	 insert into #t(xm,zslx,sfzh,xb,zsjb,zczsh,zczy,zsyxqjssj,fzsj,fzjg,zslxname,forder)
	 select b.xm,b.zslx,a.sfzh,a.xb,b.zsjb,b.zczsh,b.zczy,case when b.zslx=407 and b.zsjb=115 then ‘2250-12-31‘ else isnull(b.zsyxqjssj,‘2250-12-31‘) end ,b.fzsj,b.fzjg,c.fname,c.forder
	   from RY_RYZSXX b left join RY_RYJBXX a ON A.rybh = B.rybh
	   left join #b c on b.zslx = c.fnumber
      where b.zszt!=-1 and b.qybm [email protected]
	  order by sfzh,c.FOrder desc
	 end
	 else
	 begin
	 declare @strsql varchar(2000)
	 select @strsql = ‘
	 insert into #t(xm,zslx,sfzh,xb,zsjb,zczsh,zczy,zsyxqjssj,fzsj,fzjg,zslxname,forder)
	 select b.xm,b.zslx,a.sfzh,a.xb,b.zsjb,b.zczsh,b.zczy,case when b.zslx=407 and b.zsjb=115 then ‘‘2250-12-31‘‘ else isnull(b.zsyxqjssj,‘‘2250-12-31‘‘) end,b.fzsj,b.fzjg,c.fname,c.forder
	   from RY_RYZSXX b left join RY_RYJBXX a ON A.rybh = B.rybh
	   left join #b c on b.zslx = c.fnumber
      where  b.zszt!=-1 and b.qybm = ‘‘‘+ @fcompnbr + ‘‘‘
          ‘ + @strWhere + ‘
	  order by sfzh,c.FOrder‘

	  exec(@strsql)
	 end 

	 update #t set forder = b.sumorder from #t a,(select sum(forder) sumorder,sfzh from #t group by sfzh) b where isnull(a.sfzh,0) = isnull(b.sfzh,0)
--	 update #t set rowspan = b.rowspan from #t a,(select count(1) rowspan,sfzh from #t group by sfzh) b where isnull(a.sfzh,0) = isnull(b.sfzh,0)

--	 update #t set showname = 1 from #t a,(select min(id) id,sfzh from #t group by sfzh) b where isnull(a.sfzh,0) = isnull(b.sfzh,0) and a.id = b.id

	 declare @shid table (id int identity,sfzh varchar(50) null)
	 insert into @shid(sfzh) select sfzh from (select sfzh,max(forder) forder,min(id) id  from  #t group by sfzh) dd order by forder desc,id
     update #t set showid = b.id from #t a,@shid b where isnull(a.sfzh,0) = isnull(b.sfzh,0)

	 select @total = count(1) from  #t

	 select top (@pagesize) * into #output from (SELECT  ROW_NUMBER() OVER(ORDER BY showid) AS RowNumber, * from  #t) aa where RowNumber > @stratrow

	 --翻页重新计算
	 update #output set rowspan = sl from #output a ,(select sfzh,count(1) as sl from #output group by sfzh) b where isnull(a.sfzh,0) = isnull(b.sfzh,0)
	 update #output set showname = 1 from #output a ,(select sfzh,min(id) id     from #output group by sfzh) b where isnull(a.sfzh,0) = isnull(b.sfzh,0) and a.id = b.id

	 select * from #output ORDER BY showid

	 select (select count(1) from #t a) as zssum ,count(1) sl,zslxname,zslx from #t c group by zslxname,zslx
end

GO

通过在数据库查询处调用存储过程

若存储过程已经定义好,不希望再修改,这时可以通过模板数据集>数据库查询处调用存储过程,并在调用前增加SET NOCOUNT ON,最后执行的语句为:

SET NOCOUNT ON
exec proc_enterylist ‘${qybm}‘,‘‘,0,1,20

注:Oracle数据库中不存在这样的问题,只要成功创建一个存储过程,在设计器中正常调用即可,不会出现类似的问题。

时间: 2024-10-08 09:40:06

finereport报表,使用带参数的sql存储过程,报没有返回数据集的错的相关文章

SQL Server之 (四) ADO增删查改 登录demo 带参数的sql语句 插入自动返回行号

SQL Server之 (四) ADO增删查改  登录demo  带参数的sql语句  插入自动返回行号 自己学习笔记,转载请注明出处,谢谢!---酸菜 1.什么是ADO.NET ADO.NET是一组类库,这组类库可以让我们通过程序的方式访问数据库,并以各种方式操作存储在其中的数据; ADO.NET是基于.NET FrameWork,与.NET FrameWork类库的其余部分是高度集成的 2.连接数据库的步骤 ①创建连接字符串 Data Source=XXX-PC; Initial Catal

在JDBC中使用带参数的SQL语句

ADO.Net中,支持带参数的SQL语句,例如:Select * from Tables where [email protected],其中@column1为SQL参数,使用起来非常方便,而JDBC中没有找到此功能,感觉有点不便, 于是想自己实现一个.今天正好看见csdn中有一篇http://blog.csdn.net/wallimn/article/details/3734242 文章,有些感触,于是把自己的实现也写出来. 我的思路: 1: 在SQL语句中找到以@开始,以" ",

通过带参数的Sql语句来实现模糊查询(多条件查询)

#region 通过带参数的Sql语句来实现模糊查询(多条件查询) StringBuilder sb = new StringBuilder("select * from books"); List<string> listWheres = new List<string>(); List<SqlParameter> listParams = new List<SqlParameter>(); if (txtBookName.Text.T

好947 Mybatis 配置resultMap 带参数查询Map 注意selectOne数据库返回结果一条数据库 否则会报错

//TMD 写几个demo 还有大站采集 <a target=_blank href="http://hao947.com/" target="_blank">好947</a> 映射配置文件 <!-- type:映射实体类的数据类型 id:resultMap的唯一标识 --> <RESULTMAP id=BaseResultMap type="person"><pre name="c

带参数的CLR存储过程

昨天有学习<简单创建与布署CLR存储过程>http://www.cnblogs.com/insus/p/4371762.html,知道怎样创建以及布署至SQL中去. 下面这个范例是实现CLR存储过程附带参数: 可复制代码: SqlConnection connection = new SqlConnection("Context connection=true"); connection.Open(); SqlCommand command = new SqlCommand

ADO.NET中带参数的Sql语句的陷阱

1.使用Parameter //利用构造函数方式 ,不推荐这样写 Parameter p =new Parameter("@id",值); cmd.Parameters.Add(p); //利用对象初始化器的方式,推荐是这样写 Parameter p =new Parameter() {ParameterName="@id",Value="值"}; cmd.Parameters.Add(p); //推荐和不推荐为了什么?在下面说 2.使用Para

使用带参数的SQL语句向数据库中插入空值

private void button1_Click(object sender, EventArgs e) { string name = textBox1.Text; int age = Convert.ToInt32(textBox2.Text.Trim()); int? height = textBox3.Text.Trim().Length == 0 ? null : (int?)Convert.ToInt32(textBox3.Text.Trim()); bool? gender =

带参数的存储过程

创建带参数的sql存储过程:创建带参数的存储过程首先要在存储过程中声明该参数,每个存储过程参数都必须用惟一的名称进行定义.与标准的Transact-SQL变量相同,参数名必须以@为前缀,创建带参数的存储过程创建带参数的存储过程首先要在存储过程中声明该参数,每个存储过程参数都必须用惟一的名称进行定义.与标准的Transact-SQL变量相同,参数名必须以@为前缀,并且遵从对象标识符规则.当用户不提供该参数的值时可以使用一个默认值来代替.在执行带参数的存储过程时,既可以通过显式指定参数名称并赋予适当

带OUTPUT参数的CLR存储过程

前面写了一篇<带参数的CLR存储过程>http://www.cnblogs.com/insus/p/4373605.html ,如果我们需要创建一个带OUTPUT返回值. 实现它,可以先了解一下C#的OUT关键词 out (C# Reference) 打开刚才前面我们写好的SQL DataBase project,添加一个方法: 可复制代码: public static void GetFruitName(out SqlString fruitName, SqlByte fruit_nbr )