在一个字符串里写入多个sql,用分号分隔,用ado.net在oracle数据库里执行报错,分隔符错误
加上换行符也报错,在sql server里好像可以
有人能给点建议吗

解决方案 »

  1.   

    begin
     sql1;
     sql2;
    end;
      

  2.   

    有时我们需要一次性执行多条sql语句,而用来更新的sql是根据实际情况用代码拼出来的解决方案是把sql拼成下面这种形式:begin
    update TB_VG set seq = 1, vessel_id = 'Jin14', vessel_type = 'TRACK' where batch_number = '20837' and train_id = '0233086';
    update TB_VG set seq = 2, vessel_id = 'Jin14', vessel_type = 'TRACK' where batch_number = '20992' and train_id = '0233110';
    end;总结如下:
    以begin开始,以end;结尾(end后的分号不能省),中间的每个sql语句要以分号;结尾在实际编码中,发现即使这样也会有错误发生,把sql语句中的换行符替换成空格就可以了
    比较稳妥的编码方式是:
    1、以正常的方式编写sql,根据阅读与编写的需要,中间肯定会有换行符
    2、在执行之前进行替换:strSql = strSql.Replace("r\n", " ").Replace('\n', ' ');如果不采用这种方式,可能的异常有:ORA-00933: SQL 命令未正确结束(如果sql没有以分号结尾)
    ORA-00911: 无效字符(如果未加begin 和 end)
    ORA-06550: 第x行, 第xxx列: PLS-00103: 出现符号 "end-of-file"在需要下列之一时:......(如果end后面没有;分号)
    ORA-06550: 第x行, 第xxx列: PLS-00103: 出现符号 ""在需要下列之一时:......(语句之间有换行符)From:http://www.cnblogs.com/teamleader/archive/2007/05/31/765943.html
      

  3.   

    begin
    sql1;
    sql2;
    end;
    这种方式在sql server里报错吗,我的程序需要在多个数据库上跑?
      

  4.   

    在sql server 里面 不用分号都行
      

  5.   

    一次执行多条SQL语句应该是针对单个数据库来说的,在Sql Server 中想执行多条语句就没有这么麻烦了...建议分开来写...
      

  6.   

    估计楼主的 sql语句 是要 做成事务的。
    而且不是很方便分开来写,可能需要动态拼成语句
      

  7.   

    begin
    sql1;
    sql2;
    end;
    这种方式在sql server里报错吗,我的程序需要在多个数据库上跑?
    ===========================================================
    sql server 也可以这么用
      

  8.   

    lbx1979(Love Arsenal) ( ) 信誉:101    Blog   加为好友  2007-06-21 14:36:21  得分: 0  
     
     
       begin
    sql1;
    sql2;
    end;
    这种方式在sql server里报错吗,我的程序需要在多个数据库上跑?
      
    Oracle PL/SQL和Microsoft SQL Server Transact-SQL都支持用BEGIN…END术语来标记语句块如果楼主你的程序要同时使用多个数据库建议你的DAL用工厂Factory来对应生成吧,T-SQL和PL/SQL的用法区别在很多时候是难以通用的。(个人意见,仅供参考)
      

  9.   

    估计实现的是事务吧?建议看一下SQL事务和ado.net事务
      

  10.   

    用的ado.net 1.1 ado.net事务还是得加上吧
    这样一起执行不能保证事务
      

  11.   

    SQL可以用分号来分开执行的;;;;;;;;;;;;;;;;;;;
      

  12.   

    sql += " and ............";
    就行了
      

  13.   

    在SQL中,将多个SQL语句放入SQLCommand执行是没有问题的,但你用oracle就不清楚了。
    如果真的不行,暂时又解决不了,建议以下2种方法:
    1 改为调用存储过程
    2 使用同一个连接,分开多次执行多个命令