2009-03-26 7 views
6

У меня есть партия операторов sql, таких как ...Запуск нескольких команд в одном ExecuteScalar в Oracle

Вставить в ....; insert into ....; delete .........;

и т.д.

Когда я пытаюсь выполнить их против оракула это дает мне this ошибку (ORA-00911 Invalid Character)

теперь я могу понять, что это из-за точкой с запятой между заявлениями, я пытался это на SQL Server, и это сработало, но в Oracle до сих пор не повезло.

Есть ли способ запуска нескольких утверждений против oracle с помощью ExecuteScalar или какой-либо другой функции?


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

ответ

7

Try обертывание с BEGIN..END

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

работал для меня в SQL Developer. После того, как я вспомнил; после окончания END. –

+0

Это работало для меня в Oracle EM. –

0

пытается Бегин END не работает для меня.

Что я сделал, так это сделать новый метод, который при подключении (я пытаюсь свести к минимуму мои открытые соединения), он разбивает утверждения, используя; как разделитель и работает каждый seperatly

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(); 
    } 

Мое вдохновение пришло от this поста после того, как Petros рассказал мне об этом

PS Вы, возможно, потребуется изменить его в соответствии с вашими потребностями, в моем случае я требует подключения быть открытыми и закрытыми соответственно, если что-то происходит от вызывающего.

Смежные вопросы