2008-08-19 17 views
9

¿Es posible (en Vb.Net 2005), sin analizar manualmente las propiedades de la tabla de conjunto de datos, crear la tabla y agregarla a la base de datos?Crear tabla DB a partir de la tabla de conjunto de datos

Tenemos versiones anteriores de nuestro programa en algunas máquinas, que evidentemente tiene nuestra base de datos anterior, y estamos buscando una forma de detectar si falta una tabla y luego generar la tabla en función del estado actual de la tabla en el conjunto de datos. Estamos reescribiendo la tabla cada vez que lanzamos una nueva versión (si se agregaron nuevas columnas), pero nos gustaría evitar este paso si es posible.

+0

El enlace de Yaakov Ellis ahora está roto, ha cambiado a [este] (http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/4929a0a8-0137-45f6-86e8-d11e220048c3/) –

Respuesta

7

Ver esta publicación en el foro de MSDN: Creating a new Table in SQL Server from ADO.net DataTable.

Aquí el póster parece intentar hacer lo mismo que usted, y proporciona un código que genera una declaración Create Table usando el esquema contenido en una DataTable.

Suponiendo que funciona como debería, podría tomar ese código y enviarlo a la base de datos a través del SqlCommand.ExecuteNonQuery() para crear su tabla.

1

Este es el código

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

esperan que tienes el problema resuelto. aquí dt es el nombre de la tabla de datos. alternativamente u puede sustituir

adapter.update(dt); 

con

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

favor vote mi respuesta si usted piensa que usted ha proporcionado una respuesta !!!

Cuestiones relacionadas