2008-08-19 11 views
9

手動でデータセットテーブルのプロパティを解析せずにテーブルを作成し、データベースに追加することは可能ですか(Vb.Net 2005)。データセットテーブルからDBテーブルを作成

いくつかのマシンで古いバージョンのプログラムがありますが、明らかに古いデータベースがあります。見つからないテーブルがあるかどうかを検出し、テーブルの現在のステータスに基づいてテーブルを生成する方法を探していますデータセット内にある。新しいバージョンをリリースするたびにテーブルを再スクリプトしていましたが(新しいカラムが追加された場合)、可能であればこのステップを避けたいと考えています。

+0

Yaakov Ellisのリンクが壊れており、[this](http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/4929a0a8-0137-45f6-86e8-d11e220048c3/)に変更されました。 )。 –

答えて

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

を置き換えることができます!

関連する問題