2008-08-19 7 views
9

Est-il possible (dans Vb.Net 2005), sans analyser manuellement les propriétés de la table de jeu de données, de créer la table et de l'ajouter à la base de données? Nous avons d'anciennes versions de notre programme sur certaines machines, qui a évidemment notre ancienne base de données, et nous cherchons un moyen de détecter s'il y a une table manquante et ensuite générer la table en fonction de l'état actuel de la table dans l'ensemble de données. Nous réécrivions la table à chaque fois que nous publions une nouvelle version (si de nouvelles colonnes étaient ajoutées) mais nous aimerions éviter cette étape si possible.Créer une table DB à partir de la table de jeux de données

+0

Le lien Yaakov Ellis est maintenant cassé, il a été changé en [ceci] (http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/4929a0a8-0137-45f6-86e8-d11e220048c3/). –

Répondre

7

Voir cet article du forum MSDN: Creating a new Table in SQL Server from ADO.net DataTable.

Ici, l'affiche semble essayer de faire la même chose que vous et fournit du code qui génère une instruction Create Table en utilisant le schéma contenu dans un DataTable. En supposant que cela fonctionne comme il se doit, vous pouvez alors prendre ce code et le soumettre à la base de données via SqlCommand.ExecuteNonQuery() afin de créer votre table.

1

Voici le 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(); 

espère que vous avez résolu le problème. ici dt est le nom de la table de données. alternativement u peut remplacer

adapter.update(dt); 

avec

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

S'il vous plaît voter ma réponse si vous pensez que je vous ai fourni une réponse !!!

Questions connexes