Можно ли иметь несколько инструкций SQL в свойстве ADO.NET Command.CommandText?

Резюме

В настоящее время я пишу приложение, в котором я поместил свои инструкции SQL в параметры проекта.

Внутри кода я получаю значение моего запроса, которое возвращает сам запрос. Скажем, например, что мой SQL-запрос выглядит так:

select col1, col2, col3 from my_table

Кроме того, col1 , col2 и col3 взяты из разных таблиц и перенесены как внешний ключ в my_table. Итак, когда дело доходит до вставки, мне нужно выполнить несколько операторов INSERT, чтобы получить значения из других таблиц для этих вышеупомянутых столбцов. Скажем так:

BEGIN TRANSACTION

insert into first_table (col_x, col_y) values ('col_x', 'col_y')
insert into second_table (col_z, col_a) values ('col_z', 'col_a')
insert into third_table (col_b, col_c) values ('col_b', 'col_c')

и, наконец:

insert into my_table (col1, col2, col3, col_v) values (@col1, @col2, @col3, 'col_v')

COMMIT

Предположим, что эти столбцы col1 , col2 , col3 представляют собой целые числа с автоинкрементом для таблиц первый , второй и третий .

Вопросы

  1. Могу ли я записать сложный оператор SQL в свойство IDbCommand.CommandText, когда каждая инструкция будет разделена точка с запятой (; )?

  2. Можно ли включить BEGIN TRANSACTION ... COMMIT / ROLLBACK в это свойство CommandText ?

  3. В Короче, могу ли я написать что-то подобное?

     Используя cnx = New SqlConnection (connString)
      Использование cmd = cnx.CreateCommand ()
      cmd.CommandText = "НАЧАТЬ ТРАНЗАКЦИЮ" _
      & "вставить в значения first_table (col_x, col_y) ('col_x', 'col_y');"  _
      & "вставить в значения second_table (col_z, col_a) ('col_z', 'col_a');"  _
      & "вставить в значения третьей_таблицы (col_b, col_c) ('col_b', 'col_c');"  _
      & "вставить в my_table (col1, col2, col3, col_v) значения (@ col1, @ col2,@ col3, 'col_v');  "_
      & "COMMIT"
      cmd.ExecuterNonQuery ()
      Конец использования
    Конец использования
     

РЕДАКТИРОВАТЬ №1

Я должен был упомянуть об этом раньше ... Мэк ответил именно так, как я хотел бы пойти, за исключением того, что я не могу из-за странной политики в ИТ-отделе моего клиента, за исключением случаев, когда я использовать их собственный компонент, которого я предпочитаю избегать для простоты. Заметьте, что я все равно поддержал ответ Мака, поскольку это жизнеспособное решение, несмотря ни на что.

Заранее спасибо за вашу драгоценную помощь и время! Это очень важно для меня!

8
задан Will Marcouiller 18 July 2011 в 14:23
поделиться