2008-08-19 6 views
9

Ist es möglich (in Vb.Net 2005), die Tabelle-Eigenschaften manuell zu analysieren, die Tabelle zu erstellen und sie der Datenbank hinzuzufügen?DB-Tabelle aus Dataset-Tabelle erstellen

Wir haben alte Versionen unseres Programms auf einigen Maschinen, die offensichtlich unsere alte Datenbank hat, und wir suchen nach einer Möglichkeit zu erkennen, ob es eine fehlende Tabelle gibt und dann die Tabelle basierend auf dem aktuellen Status der Tabelle zu generieren im Datensatz. Wir haben die Tabelle jedes Mal neu geschrieben, wenn wir eine neue Version veröffentlicht haben (wenn neue Spalten hinzugefügt wurden), aber wir möchten diesen Schritt nach Möglichkeit vermeiden.

+0

Yaakov Ellis Link ist jetzt gebrochen, es hat sich geändert zu [dies] (http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/4929a0a8-0137-45f6-86e8-d11e220048c3/). –

Antwort

7

Siehe dieses MSDN Forum Post: Creating a new Table in SQL Server from ADO.net DataTable.

Hier scheint das Poster dasselbe zu tun wie Sie und stellt Code bereit, der eine Create Table-Anweisung unter Verwendung des in einer DataTable enthaltenen Schemas generiert.

Angenommen, dies funktioniert so, wie es sollte, könnten Sie diesen Code dann nehmen und über SqlCommand.ExecuteNonQuery() an die Datenbank senden, um Ihre Tabelle zu erstellen.

1

Hier ist der Code

SqlConnection con = new SqlConnection("Data Source=.;uid=sa;pwd=sa123;database=Example1"); 
     con.Open(); 
     string sql = "Create Table abcd ("; 
     foreach (DataColumn column in dt.Columns) 
     { 
      sql += "[" + column.ColumnName + "] " + "nvarchar(50)" + ","; 
     } 
     sql = sql.TrimEnd(new char[] { ',' }) + ")"; 
     SqlCommand cmd = new SqlCommand(sql, con); 
     SqlDataAdapter da = new SqlDataAdapter(cmd); 
     cmd.ExecuteNonQuery(); 
     using (var adapter = new SqlDataAdapter("SELECT * FROM abcd", con)) 
     using(var builder = new SqlCommandBuilder(adapter)) 
     { 
      adapter.InsertCommand = builder.GetInsertCommand(); 
      adapter.Update(dt); 
     } 
     con.Close(); 

hoffen, dass Sie das Problem gelöst habe. Hier ist dt der Name der Datentabelle. alternativ kann u ersetzen

adapter.update(dt); 

mit

adapter.Update(ds.Tables[0]); \\if u have a dataset 

Bitte stimmen Sie meine Antwort, wenn Sie denken, dass ich haben Ihnen eine Antwort !!!