2009-03-26 6 views
6

Ho un batch di istruzioni sql come ...Eseguire più comandi in un ExecuteScalar in Oracle

inserire in ....; inserire in ....; elimina .........;

ecc

Quando provo ad eseguire loro contro oracolo mi dà this errore (ORA-00911 carattere non valido)

ora posso capire che questo è a causa della virgola tra le dichiarazioni, ho provato questo su SQL Server e ha funzionato, ma in Oracle senza fortuna finora.

Esiste un modo per eseguire più istruzioni rispetto a Oracle utilizzando l'ExecuteScalar o qualche altra funzione?


DUPLICATO: How can I execute multiple Oracle SQL statements with .NET

risposta

7

Prova che sposta con un BEGIN..END

BEGIN insert into.... ; insert into.... ; delete .........; END; 
+0

ha funzionato per me in SQL Developer. Dopo che ho ricordato il; dopo la FINE. –

+0

Questo ha funzionato per me in Oracle EM. –

0

cercando alla fine non ha funzionato per cominciare.

Quello che ho fatto è stato creare un nuovo metodo che ha fornito una connessione (provo a minimizzare le mie connessioni aperte) divide le istruzioni usando il; come delimitatore e corre ognuno in modo esclusivo

private void ExecuteSql(string statements, IDbConnection conn) 
    { 
     IDbCommand cmd = conn.CreateCommand(); 
     string[] commands = statements.Split(new string[] { ";\r\n", "; ", ";\t", ";\n" }, StringSplitOptions.RemoveEmptyEntries); 
     foreach (string c in commands) 
     { 
      cmd.CommandText = c; 
      cmd.CommandType = CommandType.Text; 
      cmd.ExecuteNonQuery(); 
     } 

     cmd.Dispose(); 
    } 

La mia ispirazione è venuta da this posto dopo Petros me ne ha parlato

PS potrebbe essere necessario modificare in base alle proprie esigenze, nel mio caso ho bisogno della connessione essere aperto e chiuso di conseguenza se succede qualcosa dal chiamante.