2016-05-25 8 views
0

Hier mein Code, es funktioniert, wenn die Datenbank die Tabelle „UserInformation“Wie eine neue Tabelle in der Datenbank erstellen, wenn die Tabelle nicht existiert (C#)

public bool Save() 
{ 
     using (SqlConnection connection = new SqlConnection(ConnectionString) 
     { 
      connection.Open(); 

      using (SqlTransaction transaction = connection.BeginTransaction()) 
      { 
       try 
       { 
        using (var adapter = new UserInformationTableAdapter()) 
        { 
         adapter.Connection = connection; 
         adapter.Transaction = transaction; 

         var table = new HelloDataSet.UserInformationDataTable(); 
         HelloDataSet.UserInformationRow row = table.NewUserInformationRow(); 
         row.UserName = userName; 
         row.Password = password; 
         row.Brithday = brithday; 
         table.Rows.Add(row); 
         adapter.Update(table); 

         transaction.Commit(); 
         return true; 
        } 
       } 
       catch (Exception e) 
       { 
        transaction.Rollback(); 
        return false; 
       } 
       finally 
       { 
        connection.Close(); 
       } 
      } 
} 

jedoch hat, wenn keine Tabelle gibt es In der Datenbank wird die Tabelle "UserInformation" in der Datenbank nicht erstellt. Sie springt in der Zeile "adapter.Update (table)" zur Ausnahme "catch".

Also meine Frage ist, wie kann ich eine neue Tabelle in der Datenbank erstellen, wenn es keine "UserInformation" -Tabelle darin gibt. Wenn die Datenbank die Tabelle "UserInformation" bereits enthält, kann ich außerdem eine neue Spalte "Position" in dieser Tabelle hinzufügen?

+0

Ich bin mir nicht sicher, was Sie fragen. Versuchen Sie, Zeilen in eine Tabelle einzufügen, die möglicherweise nicht existiert? Möchten Sie, dass der Datenbankserver automatisch eine Tabelle mit einer bestimmten Feldstruktur erstellt, wenn die Tabelle nicht vorhanden ist? (Warum sollte die Tabelle nicht da sein?) Ich würde vorschlagen, die Tabelle mit einem 'CREATE TABLE'-Befehl oder mit einem interaktiven Tool wie SQL Server Management Studio zu erstellen. Außerdem erwähnen Sie nicht, mit welcher Art von Datenbank Sie arbeiten. Eine entsprechende Beantwortung dieser Frage wird die Relevanz der Antworten verbessern. –

+0

Ich möchte Datenbankserver automatisch die Tabelle erstellen. Der Grund ist, ich werde dem Benutzer erlauben, die Datenbank zu wählen. Wenn der Benutzer also zu einer neuen Datenbank wechselt, sollte meine Anwendung in der Lage sein, diese Tabelle in der neuen Datenbank zu erstellen. –

+1

Sie müssen ein Skript oder eine Reihe von SQL-Anweisungen erstellen, die Ihr Programm ausführt. Gespeicherte Prozeduren oder Trigger sind nicht verfügbar, da die Datenbank, wenn sie neu ist, keine Tabellen oder Code zum Erstellen der Tabellen enthält. Ich würde nach der Existenz einer Ihrer Tabellen suchen und dann den Benutzer bitten, Tabellen für (Anwendungsname) zu initialisieren? Wenn der Benutzer ja sagt, führen Sie das Skript oder den Satz von CREATE TABLE-SQL-Anweisungen aus. –

Antwort

0

Endlich habe ich die Antwort und möchte es teilen. Zuerst muss ich sagen, dass ich meine Frage falsch gestellt habe. Was ich wirklich will ist, ich habe eine Anwendung, und diese Anwendung ist mit einer Datenbank verbunden. Ich darf jedoch die Datenbank wechseln. Wenn der Benutzer zu einer neuen Datenbank wechselt, möchte ich, dass die Anwendung die gesamte Datenbankstruktur (ohne die Daten) von der alten Datenbank in die neue kopiert. Wenn ich Änderungen an der Datenbank in meinem Anwendungscode vornehmen möchte (eine neue Spalte für eine oder mehrere Tabellen hinzufügen oder eine weitere neue Tabelle hinzufügen), möchte ich, dass jede andere Datenbank die Aktualisierungen kennt und dieselben Änderungen durchführt, indem sie ausgeführt werden mein neuer Anwendungscode.


Also, hier ist meine Lösung. Ich schreibe ein Framework namens "SchemaManager". Es wird eine zusätzliche Tabelle in jeder Datenbank erstellt, diese Tabelle enthält die Version der Datenbank. Jedes Mal, wenn ich meine Anwendung starte, überprüft der "SchemaManager" die Versionsnummer meiner Hard-Code-Datenbank mit der Versionsnummer der Datenbank. Wenn die Versionsnummer meiner Hard-Code-Datenbank größer als die Versionsnummer der Datenbank ist, überprüft der "SchemaManager" die Änderung und mache das Update für mich.


Ich weiß meine Lösung ist nicht die beste, aber das ist, was ich getan habe. Wenn jemand eine andere Lösung hat, bitte teilen Sie mit mir und anderen Leuten.

Verwandte Themen