oracle存储过程被调用时出现"rowid"无效或"对象不再存在"的
- 作者: 沉睡的狮子
- 来源: 51数据库
- 2020-08-13
|
自己在写ASP.net程序时,需要调用以前的数据库,由于自己刚接触asp.net和oracle。所以在程序中调用存储过程时真是煞费苦心。刚一开始,自己不知道怎么写,在网上搜索,终于找到了关于这方面的源码,但这些源码都是纯粹的把结果集写入表来使用。由于自己不太懂表和临时表的区别,所以在改过网上的源码后还是不能调出结果集,一直提示"rowid无效"或"当前对象不再存在"。自己在网上搜索了很多关于这方面的帖子,但讲解的方法却大同小异,根本解决不了问题。自己是百思不得其解。今天早上,来到办公室,实在是做不下去了,于是去问项目经理,问题在哪。自己在pl/sql中测试的很正常。而且自己在asp.net中调用其它的存储过程是可以成功的。项目经理说:它们两个存储过程返回的结果集插入的都是临时表吗?我说:是,都是以T_TMP开头的。但当项目经理从表->view->viewSQL查看到sql语句时,我傻眼了,调用成功的那个竟然是table,而非temporary table。这是他说只要是临时表,在调用存储过程时,必须要加事务,这样才能被调用成功。真是醍醐灌顶啊。自己就是没有加事务。只需要加一句begintransaction,就可以了。并且个人以为以T_TMP_RPT开头的表是临时表(个人观点不一定十分准确)。最终成功的代码为: OracleConnection oraCon = null;//连接
OracleCommand cmd = null;//命令行用于添加存储过程或包
OracleDataAdapter myda = null;
oraCon = new OracleConnection(strCon);
cmd = new OracleCommand("pg_rpt_fjkwlddml.p_rpt_fjkwlddml", oraCon);//写入存储过程或包名称
//添加存储过程参数
//ot.Commit();
GridView1.DataSource = myds;//数据源指定 |
