Можно ли (в Vb.Net 2005), не анализируя вручную свойства таблицы набора данных, создать таблицу и добавить ее в базу данных?
У нас есть старые версии нашей программы на некоторых машинах, которые, очевидно, имеют нашу старую базу данных, и мы ищем способ определить, есть ли отсутствующая таблица, а затем сгенерировать таблицу на основе текущего состояния таблицы в наборе данных. Мы переписывали таблицу каждый раз, когда выпускали новую версию (если были добавлены новые столбцы), но мы хотели бы избежать этого шага, если это возможно.
Посмотрите это сообщение на форуме MSDN: Создание новой таблицы в SQL Server из таблицы данных ADO.net .
Здесь автор, похоже, пытается сделать то же самое, что и вы, и предоставляет код, который генерирует оператор Create Table с использованием схемы, содержащейся в DataTable.
Предполагая, что это работает должным образом, вы можете взять этот код и отправить его в базу данных 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]);