2008-08-19 93 views
9

创建数据库表是否有可能(在2005年Vb.Net),而无需手动分析数据集表格属性,创建表,并将其添加到数据库?从数据集表

我们在某些机器上有旧版本的程序,显然有我们的旧数据库,而且我们正在寻找一种方法来检测是否存在缺少的表,然后根据表的当前状态生成表在数据集中。每当我们发布新版本(如果添加新列),我们都在重新编写表格脚本,但如果可能的话,我们希望避免这一步骤。

+0

Yaakov Ellis链接现在已损坏,它已更改为[this](http://social.msdn.microsoft.com/Forums/zh-CN/adodotnetdataproviders/thread/4929a0a8-0137-45f6-86e8-d11e220048c3/ )。 – 2011-07-21 14:45:43

回答

7

看到这个MSDN论坛帖子:Creating a new Table in SQL Server from ADO.net DataTable

这里海报似乎试图做同样的事情,你,并提供了利用包含在一个DataTable的架构CREATE TABLE语句代码。

假设这个作品,因为它应该,然后你可以采取的代码,并通过SqlCommand.ExecuteNonQuery()以创建表提交到数据库。

1

下面是代码

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

希望你有解决了这个问题。 这里dt是数据表的名称。 或者U可以与

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

请投我的答案,如果你认为我已经为您提供了一个答案替换

adapter.update(dt);