问题描述
在改造一个项目的时候发现,项目里面有比较多的批sql(在SQLServer库+System.Data.SqlClient是可以执行多条SQL语句),改造成Oracle的SQL语句之后发现不能通过OracleClient来执行,无论是command的executenoquery()还是scalar()等方法。需要执行的SQL语句如下:deletefromt1wheret1.f1='11';deletefromt2wheret2.f1='22';selectf1fromt3wheret3.f1='33';要求:不使用存储过程或者分条包装成事务(因为原来代码结构的限制)各位哥哥有什么好办法么?
解决方案
解决方案二:
应该可以得吧,LZcommand怎么写的
解决方案三:
嗯,代码贴上来帮你Look一下..你说的问题意思上没问题.
解决方案四:
command.cmdtext="deletefromt1wheret1.f1='11'";command.executenoquery();command.cmdtext="deletefromt2wheret2.f1='22'";command.executenoquery();......
解决方案五:
stringsqlCmd="deletefromt1wheret1.f1='11';deletefromt2wheret2.f1='22';selectf1fromt3wheret3.f1='33';"
解决方案六:
楼上正确
解决方案七:
4楼的不能执行,我试过,我也碰到过这种问题,那种语句在PLSQL软件就可以执行,放到C#代码是就不行.
解决方案八:
用循环执行吧
解决方案九:
分号可以的,我用过的以begin开始,以end;结尾(end后的分号不能省),中间的每个sql语句要以分号;结尾
解决方案十:
stringsqlCmd="begindeletefromt1wheret1.f1='11';deletefromt2wheret2.f1='22';selectf1fromt3wheret3.f1='33';end"
解决方案十一:
用beginend试试
解决方案十二:
没用过beginend这样应该可以.
解决方案十三:
不加beginend直接加分号也是可以的
解决方案十四:
感谢各位的回答,今天和同事研究了半天,发现问题是这样的:.NET自己提供的System.Data.OracleClient.dll不能执行多条SQL语句,也不能执行标准PL/SQL块(begin....end;);而Oracle自己提供的驱动(ODBC;OleDb;OracleNet)都可以执行标准的PL/SQL块,也就是说可以执行多条Inser、Delete、Update语句。可是问题又出来,多条Select语句是不能执行的,PL/SQL块里面Select必须into一个变量,看来只能改程序,一个个执行select了。