Ist es möglich, mehrere SQL-Anweisungen in eine ADO.NET Befehl.CommandText-Eigenschaft?

Zusammenfassung

Ich bin derzeit eine Anwendung schreiben, wo ich sich meine SQL-Anweisungen in einem Projekt die Parameter.

Innerhalb des Codes bekomme ich den Wert aus meiner Abfrage gibt die Abfrage selbst. Lassen Sie uns zum Beispiel sagen, dass meine SQL-Abfrage lautet in etwa so:

select col1, col2, col3 from my_table

Außerdem col1, col2 und col3 sind aus verschiedenen Tabellen und migriert werden als Fremdschlüssel in my_table. Also, wenn es um die einfügen, ich habe für mehrere INSERT-Anweisungen, um die Werte aus den anderen Tabellen für diese oben genannten Spalten. Lassen Sie uns sagen, wie folgt:

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')

und schließlich:

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

COMMIT

Nehmen Sie es, dass diese col1, col2, col3 Spalten sind auto-increment-Integer für Tabellen first, second und third.

Fragen

  1. Könnte ich schreiben komplexer SQL-Anweisung in die IDbCommand.CommandText-Eigenschaft, während jede Anweisung würde durch ein Semikolon getrennt werden (;)?

  2. Ist es möglich, eine BEGIN TRANSACTION...COMMIT/ROLLBACK in diesem CommandText Eigenschaft?

  3. Kurz gesagt, könnte ich schreiben so etwas?

    Using cnx = New SqlConnection(connString)
        Using cmd = cnx.CreateCommand()
            cmd.CommandText = "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"
            cmd.ExecuterNonQuery()
        End Using
    End Using

EDIT #1

Sollte ich es erwähnt haben, bevor... Mack ' s Antwort ist der Weg, den ich gehen möchte, außer, dass ich nicht kann, weil der seltsame Strategien innerhalb der IT-Abteilung meines Klienten, außer, wenn ich diese eigene Komponente, die ich eher vermeiden Einfachheit halber. Beachten Sie, dass ich von Ihnen positiv bewertet werden Mack ' s Antwort sowieso, da ist es eine praktikable Lösung, egal was.

Vielen Dank im Voraus für Ihre wertvolle Hilfe und Zeit! Dies ist für mich entscheidend!

Schreibe einen Kommentar