以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [讨论]关于存储过程执行不能返回结果的问题 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=29416) |
-- 作者:fox0001 -- 发布时间:2013/3/6 14:01:00 -- [讨论]关于存储过程执行不能返回结果的问题 有以下两个存储过程 fox_test_01、fox_test_02 和 fox_test_03 : ------------------------------------------------ create proc fox_test_01 as begin select \'1\' 编号, \'apple\' 名称 union all select \'2\' 编号, \'banana\' 名称 union all select \'3\' 编号, \'cherry\' 名称 end ------------------------------------------------ create proc fox_test_02 as begin select \'1\' 编号, \'apple\' 名称 into #tmp union all select \'2\' 编号, \'banana\' 名称 union all select \'3\' 编号, \'cherry\' 名称 select * from #tmp end ------------------------------------------------ create proc fox_test_03 as begin create table #tmp(编号 varchar(20), 名称 varchar(50)) insert into #tmp(编号, 名称) select \'1\' 编号, \'apple\' 名称 union all select \'2\' 编号, \'banana\' 名称 union all select \'3\' 编号, \'cherry\' 名称 select * from #tmp end ------------------------------------------------ 利用 SQLCommand 的 ExecuteReader 方法分别执行以下SQL: exec fox_test_01 exec fox_test_02 exec fox_test_03 结果只有fox_test_01返回结果,fox_test_02却返回空,fox_test_03提示SQL语法错误而不能执行。 貌似 ExecuteReader 方法只能获取第一个语句的结果,而导致上面的结果。这个是不是Bug? 因为很多复杂的报表,都用存储过程来执行查询并返回结果,希望能够解决这个问题。
[此贴子已经被作者于2013-3-6 14:06:54编辑过]
|
-- 作者:狐狸爸爸 -- 发布时间:2013/3/6 15:29:00 -- ExecuteReader 确实只会返回第一个结果的。 |
-- 作者:fox0001 -- 发布时间:2013/3/7 8:17:00 -- 以下是引用狐狸爸爸在2013-3-6 15:29:00的发言:
ExecuteReader 确实只会返回第一个结果的。 这个能不能处理一下?或者有什么好的解决办法? 1)目前的解决办法是把存储过程的查询结果都保存到一个表A里,再用ExecuteReader查询表A,最后删除表A。这样很麻烦,而且狐表还没有事务,有时会出错而导致表A没有被删除,数据库会留下很多垃圾表。 2)想过用视图解决,还没试过。 3)由于狐表还不支持事务,如果做事务处理的话,可能不能返回最后事务处理的结果。 |
-- 作者:fox0001 -- 发布时间:2013/3/7 8:49:00 -- 以下是引用muhua在2013-3-7 8:36:00的发言:
事务处理应该是用存储过程来完成,而不是应该用狐表来完成,既然您会写存储过程,为什么不在存储过程中所使用事务处理呢?? 事务处理是可以用存储过程处理,但是储存过程执行完毕后,怎么能获取到处理结果?问题还是,狐表只能获取并返回存储过程中第一个语句的结果。 |