Резюме
В настоящее время я пишу приложение, в котором я поместил свои инструкции 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
представляют собой целые числа с автоинкрементом для таблиц первый
, второй
и третий
.
Вопросы
Могу ли я записать сложный оператор SQL в свойство IDbCommand.CommandText, когда каждая инструкция будет разделена точка с запятой (;
)?
Можно ли включить BEGIN TRANSACTION ... COMMIT / ROLLBACK
в это свойство CommandText
?
В Короче, могу ли я написать что-то подобное?
Используя 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
Я должен был упомянуть об этом раньше ... Мэк ответил именно так, как я хотел бы пойти, за исключением того, что я не могу из-за странной политики в ИТ-отделе моего клиента, за исключением случаев, когда я использовать их собственный компонент, которого я предпочитаю избегать для простоты. Заметьте, что я все равно поддержал ответ Мака, поскольку это жизнеспособное решение, несмотря ни на что.
Заранее спасибо за вашу драгоценную помощь и время! Это очень важно для меня!