Datenbank und Tabellen in einem Befehl erstellen.

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Morphesus.

    Datenbank und Tabellen in einem Befehl erstellen.

    Hi,

    ich suche nun schon seit einer Woche im Internet (google)rum, ob man die befehle "CREATE DATABASE" und "CREATE TABLE" zusammenfügen kann... ich bekomme aber leider nur Syntaxvorschläge für die einzelnen Befehle. Folgendes möchte ich tun:

    Ich möchte beim setzen eines Häkchens eine neue Datenbank erstellen mit vorgegebenen Tabellen. Dafür möchte ich aber nicht drei mal folgendes in meinen VB Quellcode schreiben müssen

    Quellcode

    1. SqlQuery = "create database " & DatenbankName
    2. SqlCommand.CommandText = SqlQuery
    3. SqlConnect.Open()
    4. SqlCommand.ExecuteNonQuery()
    5. SqlConnect.Close()


    Ich würde mich über ein paar Lösungsvorschläge sehr freuen.
    MfG
    Yunkie
    Der Vorteil der Intelligenz besteht darin, sich dumm stellen zu können. Das Gegenteil davon ist schon schwieriger.
    Kurz: Das geht nicht^^
    Es gibt nur folgende Möglichkeit:

    SQL-Abfrage

    1. CREATE DATABASE `datenbankname`; CREATE TABLE `datenbankname`.`test` (`ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,`Content` TEXT NOT NULL) ENGINE = MYISAM ;

    So als Beispiel, kann natürlich auch anders aussehen, insbesondere der Inhalt ;)

    lg Morph

    // Edit: Einzelne Statements werden mit einem ";" getrennt, so kannst du mehrere Abfragen beispielsweise in einen String packen...
    Das ist ja eigentlich schon das was ich haben möchte. :)

    Das Problem ist, wenn ich das in den Microsoft SQL Server Management Studio so eingebe, dann erzählt er mir "Die Datenbank ist nicht verfügbar"... Das sie noch nicht da ist bevor ich auf ausführen geklickt habe ist klar... aber wenn er es ausführt erstellt er ja zuerst die Datenbank und dann die Tabelle darin... ich komm halt nur garnicht erst soweit... :S

    Vielleicht hätte ich dazusagen sollen das es sich um einen Microsoft SQL Server 2008 handelt... Sorry
    Der Vorteil der Intelligenz besteht darin, sich dumm stellen zu können. Das Gegenteil davon ist schon schwieriger.
    Warum machst du's nicht in mehreren SQL-Statements? Schreib dir ne Funktion, die Tabellen erstellt, die musst du dann nur noch aufrufen.

    Ansonsten probiers mal mit USE:

    SQL-Abfrage

    1. CREATE DATABASE `datenbankname`; USE datenbankname; CREATE TABLE `datenbankname`.`test` (`ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,`Content` TEXT NOT NULL) ENGINE = MYISAM ;
    Das mit den mehreren SQL-Statements wollt ich ja grade umgehen ^^ ...

    Das mit dem "Use" hab ich auch schon ausprobiert. Funktioniert aber leider auch nicht... Er meldet immernoch das die Datenbank nicht verfügbar ist... Könnte mir vorstellen das er das ";" nicht als Trennzeichen erkennt... Da es eben MS-SQL ist... Weiss halt nicht genau wo die Syntaxunterschiede zwischen MS-SQL und MySQL sind.

    Dann werde ich mir eben eine Funktion basteln müssen ^^ ...

    Trozdem vielen Dank an euch für eure schnelle Hilfe!



    MfG

    Yunkie
    Der Vorteil der Intelligenz besteht darin, sich dumm stellen zu können. Das Gegenteil davon ist schon schwieriger.
    Generell is man ja gewillt den Quellcode kurz zu halten. Deswegen wollte ich halt nich jedes Query einzeln übertragen ^^ ...


    VB.NET-Quellcode

    1. Private Sub Datenbank_Erstellen()
    2. DatenbankName = InputBox("Geben Sie den Namen für die neue Datenbank ein!")
    3. StringBilden()
    4. SqlConnect.ConnectionString = StringBuilder.ConnectionString
    5. SqlCommand.Connection = SqlConnect
    6. SqlConnect.Open()
    7. SqlCommand.CommandText = "Create database " & DatenbankName
    8. SqlCommand.ExecuteNonQuery()
    9. SqlCommand.CommandText = "Create Table " & DatenbankName & ".dbo.Kategorie (a$1 Char(20))"
    10. SqlCommand.ExecuteNonQuery()
    11. SqlCommand.CommandText = "insert into " & DatenbankName & ".dbo.Kategorie (a$1) Values('Bauteile')"
    12. SqlCommand.ExecuteNonQuery()
    13. SqlConnect.Close()
    14. End Sub
    15. Public Sub StringBilden()
    16. StringBuilder.DataSource = ServerString
    17. StringBuilder.InitialCatalog = Datenbank
    18. StringBuilder.IntegratedSecurity = WinAuth
    19. If WinAuth = False Then
    20. StringBuilder.UserID = Benutzer
    21. StringBuilder.Password = Passwort
    22. End If
    23. End Sub


    So funktionierts erstmal ^^
    Der Vorteil der Intelligenz besteht darin, sich dumm stellen zu können. Das Gegenteil davon ist schon schwieriger.
    Generell is man ja gewillt den Quellcode kurz zu halten.


    Das ist richtig, darauf sollte man schon etwas achten. Aber das ist hier meiner Meinung nach an der falschen Stelle gespart ;). Ob du jetzt 3 einzelne Statements abschickst, oder die 3 Statements in eins packst, wirds du in deiner Anwendung performancetechnisch nie merken. Behalt den Ansatz dennoch für größere Projekte im Hinterkopf :thumbup:

    Fonsi schrieb:

    Das ist richtig, darauf sollte man schon etwas achten. Aber das ist hier meiner Meinung nach an der falschen Stelle gespart . Ob du jetzt 3 einzelne Statements abschickst, oder die 3 Statements in eins packst, wirds du in deiner Anwendung performancetechnisch nie merken. Behalt den Ansatz dennoch für größere Projekte im Hinterkopf

    Würde ich so nicht sagen... Wie gesagt: Einige Datenbanksysteme mögen gestapelte Statements nicht... So wie der Code jetzt aufgebaut ist passts schon soweit... Hätte zwar eher ein String Array angelegt und wäre den Rest dann per For Each durchgegangen, aber ist ja im Prinzip eig auch nichts anderes, nur dass der Code bei vielen Anfragen wesentlich kürzer wäre ;)

    lg Morph
    Dann weiss ich Bescheid ^^

    Ich bedanke mich nochmal vielmals für die Antworten und der Kompetenten Hilfe...

    Ist ja im Internet von heute nicht mehr oft zu finden... Da kommen dann unsittliche Kommentare ob man den zu blöd wär das selber hinzubekommen... Hab ich jedenfalls oft genug gesehn und erlebt...

    Dafür möchte ich mich jedenfalls nochmal bedanken :thumbsup:



    MfG

    Yunkie
    Der Vorteil der Intelligenz besteht darin, sich dumm stellen zu können. Das Gegenteil davon ist schon schwieriger.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Yunkie“ ()

    Gerne doch :) Wie gesagt: Wir beantworten hier gerne Fragen, sofern sie Sinnvoll sind :) Was wir nicht mögen - verständlicher Weise - ist, wenn derjenige selbst nicht fähig ist mal Google zu nutzen, da das nun mal das höchste Gebot eines jeden Programmierers: "Use Google!" ;) Aber das ist nicht auf dich bezogen! Ich hab das nur mal angesprochen, weil du da schon etwas in der Richtung erwähnt hattest...

    lg Morph