2016-08-08 8 views
-3

In meinem Projekt kann ein Benutzer jedes Jahr aus Dropdown-Liste auf der Webseite zur Verfügung gestellt. In diesem Jahr wird dann eine neue Tabelle erstellt, die beispielsweise das Jahr enthält.Erstellen Sie eine neue Tabelle in SQL und jede Tabelle haben unterschiedliche Spaltennamen mit C#

user choose 2018 so the new table name is 'shipname(2018)'. 

Dies ist einfach, wenn die Lösung einfach ist. Diese neue Tabelle hat jedoch den Spaltennamen, der sich auf das Jahr bezieht, das sich über 30 Jahre erstreckt.

user choose 2018 so the new table name is 'shipname(2018)' that contain column name TagRef, 2018, 2019, 2020, 2021, ..., 2048. 
user choose 2020 so the new table name is 'shipname(2020)' that contain column name TagRef, 2020, 2021, 2022, 2023, ..., 2050. 

Ist es möglich, die Spaltennamen wie die Verwendung von C# und SQL-Befehl zu machen?

+4

warum nicht eine einzige Tabelle? Warum für jedes Jahr eine Tabelle erstellen? Dafür gibt es Indizes. –

+1

Sie müssen das Design überprüfen. Sie haben irgendwo einen falschen Weg gewählt –

+0

Es weil jedes shipname unterschiedliches Grundjahr hat, in dem der Benutzer von der Dropdownliste wählt. und jeder Schiffsname hat unterschiedliche Daten, die benötigt werden, um die Zeile auszufüllen. – Fahmieyz

Antwort

1

Natürlich können Sie. Sie sollten jedoch vorsichtig sein, Tabellen dynamisch zu erstellen.

private static void CreateTable(int year) 
{ 
    using (var connection = new SqlConnection("Data Source=11.22.33.44;" 
     + "Initial Catalog=database_abc;" 
     + "User id=userid;" 
     + "Password=password;")) 
    { 
     connection.Open(); 

     var command = new SqlCommand("CREATE TABLE [shipname(" + year + ")] (" 
      + "TagRef VARCHAR(10), " 
      + string.Join(", ", Enumerable.Range(year, 31).Select(t => "[" + t + "] INT")) 
      + ")", connection); 

     command.ExecuteNonQuery(); 
    } 
} 

Aus Gründen der Sicherheit und der Codierung erstellen wir normalerweise keine Tabelle in Runtime und mit numerischen Spalten.

Schiffsname | base_year | TagRef | Schiff_Jahr | Wert

Die meiste Zeit, können Sie Ihre Tabelle rekonstruieren, um wartbarer zu sein.

+2

Tatsächlich ist einer der Marker eines schlechten Designs, dass die Benutzer Datenbankobjekte erstellen können (Hinweis - ich spreche über Objekte, nicht über Daten). –

+2

einen Mann Fuß schießen und Sie ihn für einen Tag hinken lassen; Bringen Sie einem Mann bei, seinen eigenen Fuß zu schießen, und Sie lassen ihn ein Leben lang hinken –

+0

@DiligentKeyPresser Der Schutz von jemandem blendet ihn nicht in Gefahr. Zeigen Sie ihnen stattdessen, was es ist und wie Sie es vermeiden können. Ich werde neugierigen Menschen nicht die Tür zuschlagen. – Tommy

Verwandte Themen