C#中如何执行多条Oracle的SQL语句(不用存储过程和事务)

问题描述

在改造一个项目的时候发现,项目里面有比较多的批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了。

时间: 2025-01-15 05:58:18

C#中如何执行多条Oracle的SQL语句(不用存储过程和事务)的相关文章

jdbc-JDBC 并发事务中执行多条相同的Update语句,为什么会造成死锁?

问题描述 JDBC 并发事务中执行多条相同的Update语句,为什么会造成死锁? 如题,我在多个线程中并发向A库的XXXX表提交事务,每个事务中执行两条Update语句: update xxxx set column1 = '11' where ID = '11' update xxxx set column2 = '22' where ID = '22' 结果在运行过程中抛出死锁异常: 事务(进程ID 211)与另一个进程被死锁在锁|线程资源上,并且已被选作死锁牺牲品.请重新运行该事务. 解决

Oracle 历史SQL语句执行计划的对比与分析

    基于CBO优化器的环境中,SQL执行计划的生成依赖于统计信息的真实与完整.如列的离散度,列上的直方图,索引的可用性,索引上的聚簇因子.当这些信息是真实完整的情况下,CBO优化器通常都可以制定最优的执行计划.也正因此CBO优化器也灵活,难以控制,任一信息的不真实或缺失都可能导致执行计划发生变化而产生多个版本.经常碰到的情形是之前的某个SQL语句前阵子还不是TOP SQL,而最近变成了TOP SQL.或者说之前尽管是TOP SQL但,但最近尽然成了TOP 1.对于此情形,我们可以比对SQL语

Oracle之SQL语句性能优化(34条优化方法)_oracle

好多同学对sql的优化好像是知道的甚少,最近总结了以下34条仅供参考. (1)选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表. (2) WH

ORACLE数据库SQL语句的执行过程

SQL语句在 数据库中处理过程是怎样的呢?执行顺序呢?在回答这个问题前,我们先来回顾一下:在ORACLE数据库系统架构下,SQL语句由用户进程产生,然后传到相 对应的服务端进程,之后由服务器进程执行该SQL语句,如果是SELECT语句,服务器进程还需要将执行结果回传给用户进程. SQL语句的执行过程一般如下: 解析(PARSE)-- 绑定(BIND)--执行(EXECUTE)--提取(FETCH 只有SELECT才需要这步) 解析   服务器进程接收到一个SQL语句时,首先要将其转换成执行这个S

数据库 oracle-oracle的存储过程中,执行用databaae links建立的另外一个存储过程报错!

问题描述 oracle的存储过程中,执行用databaae links建立的另外一个存储过程报错! 本地存储过程执行另外一个用数据链接操作的存储过程报错,是个oracle代码,题是分布式数据库不能操作 理论上通过数据链接应该可以执行的. 为什么? 解决方案 http://www.educity.cn/wenda/411522.html

把这四条sql语句从sqlsever变成oracle的sql语句,求帮忙

问题描述 把这四条sql语句从sqlsever变成oracle的sql语句,求帮忙 1C 1.SELECT top 1 MENUID+1 from app_menu ORDER BY CAST(MENUID AS int) desc 2.SELECT top 1 idfileNamefilePathcreateTimemd5fileSize FROM VIS_file WHERE md5=#md5# 3. SELECT top 1 USERIDREALNAMEGENDEROTELOEMAILQQ

wfs-ogr在连接数据源之后,执行ExcuteSQL()方法时,sql语句中含有中文的语法规范?

问题描述 ogr在连接数据源之后,执行ExcuteSQL()方法时,sql语句中含有中文的语法规范? 使用C#调用OGR类库 数据源:将shp文件使用geoserver发布成wfs服务,利用ogr提供的wfs驱动进行调用: 使用的方法:连接wfs服务之后,调用datasource类中的ExcuteSQL(string strsql)方法 问题:当执行的sql语句中含有中文时,则会报语法错误:eg:select * from ceshi where 编码='abc',有大神使用ogr调用wfs服务

Oracle常用sql语句

Oracle数据库常用sql语句 ORACLE 常用的SQL语法和数据对象 一.数据控制语句 (DML) 部分 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, 字段名2, --) VALUES ( 值1, 值2, --); INSERT INTO 表名(字段名1, 字段名2, --) SELECT (字段名1, 字段名2, --) FROM 另外的表名; 字符串类型的字段值必须用单引号括起来, 例如: 'GOOD DAY' 如果字段值里包含单引号' 需要

sqlserver 1 n-sqlserver 两个表关联1:n求随机取一条数据的sql语句实现!

问题描述 sqlserver 两个表关联1:n求随机取一条数据的sql语句实现! 现在要补齐tb1中演唱歌曲字段.条件是去tb2中查找相同艺人演唱过的歌曲,随机填充到tb1中的歌曲名字段 一个歌手不止演唱一首歌,所以tb2中是艺人演唱所有歌曲的集合.tb1中同一个歌手可能出现好几次 补齐时候需根据tb1中艺人名称去tb2也就是艺人歌曲汇总表中查找相同艺人演唱的歌曲名称. 需要在艺人名相同情况下随机取tb2中演唱歌曲名去一一补齐tb1中的字段 tb1 tb1 艺人 演唱歌曲名 a null b n