是否可以(在 Vb.Net 2005 中)在不手动解析数据集表属性的情况下创建表并将其添加到数据库中?
我们在一些机器上有旧版本的程序,显然有我们的旧数据库,我们正在寻找一种方法来检测是否存在丢失的表,然后根据数据集中表的当前状态生成表。每次发布新版本时(如果添加了新列),我们都会重新编写表格脚本,但如果可能,我们希望避免此步骤。
是否可以(在 Vb.Net 2005 中)在不手动解析数据集表属性的情况下创建表并将其添加到数据库中?
我们在一些机器上有旧版本的程序,显然有我们的旧数据库,我们正在寻找一种方法来检测是否存在丢失的表,然后根据数据集中表的当前状态生成表。每次发布新版本时(如果添加了新列),我们都会重新编写表格脚本,但如果可能,我们希望避免此步骤。
请参阅此 MSDN 论坛帖子:从 ADO.net DataTable 在 SQL Server 中创建新表。
在这里,张贴者似乎在尝试和您做同样的事情,并提供了使用 DataTable 中包含的模式生成 Create Table 语句的代码。
假设这可以正常工作,那么您可以获取该代码,并将其提交到数据库SqlCommand.ExecuteNonQuery()
以创建您的表。
这是代码:
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
是数据表的名称。
或者,您可以替换:
adapter.update(dt);
和
//if you have a DataSet
adapter.Update(ds.Tables[0]);