Introducir el contenido de un archivo XML en una tabla SQL con SQLBulkCopy

En un artículo anterior, habíamos convertido SQL en XML utilizando algunos de los métodos básicos disponibles en Visual Studio, ahora me gustaría mostraros cómo hacer precisamente lo contrario. Actualmente trabajo en el mantenimiento de aplicaciones de negocio, y quiero aprender a manejar XML de una manera experta. Esto es sólo un ejemplo de cómo utilizar .NET para utilizar XML.

Cómo llevarlo a cabo

El formulario de la aplicación consiste en un botón y un DataGridView. El botón solo pone en marcha los eventos. Cogeré el XML formateado más abajo y lo colocaré dentro del DataGrid y de la tabla de SQL que crearemos a continuación.

<NewDataSet>
  <Table>
    <LName>Fellani</LName>
    <FName>Morouanne</FName>
    <Position>Center Midfield</Position>
  </Table>

Aparte del formulario, necesito una tabla que reciba esta información con las columnas LName, FName y Position. Para este caso, he creado algo así:

CREATE TABLE [dbo].[Midfield]
(
    LName varchar(24) not null,
    FName varchar(24) not null,
    Position Varchar(16) not null
)

La primera parte del código es la creación de un DataSet para recibir el contenido del archivo XML. El DataSet se rellena con el método XML ReadXML de la clase DataSet. Este método lee tanto el esquema y los datos y coloca el XML en el DataSet con un solo parámetro, el nombre de archivo. El Data Table .readXML requiere un parámetro adicional, y algunos otros ajustes. Para simplificar, he usado el DataSet y he hecho la primera tabla por el set de un DataTable. En la cuarta línea de código, a el DataTable se le da el nombre de la tabla para que se pueda utilizar en el código del SqlBulkCopy.

DataSet mcsc = new DataSet();
mcsc.ReadXml( @"C:dirdirdirxmlexcelthing.xml");
DataTable mcsc1 = mcsc.Tables[0];
mcsc1.TableName = "Midfield"

Para probar el ejemplo anterior, hice el DataTable el DataSource para mi DataGridView. Haciendo clic en el evento Button, debería rellenarse.

dataGridView1.DataSource = mcsc1;

La última parte es la introducción de datos que consiste en unas pocas líneas de C # utilizando los métodos y propiedades de SqlBulkCopy. He puesto el código SQL en un bloque try / catch para atrapar los errores relacionados con SQL. Yo en primer lugar abro una SqlConnection para el LocalDB, entonces utilizo las propiedades SqlBulkCopy para mapear en el DataTable las columnas de la tabla. Después de este mapeo, el DataTable se posiciona 'en masse'.

try
            {
                using (SqlConnection connex = new SqlConnection
                (@"Data Source=(LocalDB)v11.0;Integrated Security=True;
                AttachDbFilename=c:dirdirMF.mdf"))
                {
                    connex.Open();
                    using (SqlBulkCopy s = new SqlBulkCopy(connex))
                    {
                        s.DestinationTableName = mcsc1.TableName;
                        foreach (var column in mcsc1.Columns)
                            s.ColumnMappings.Add(column.ToString(), column.ToString());
                        s.WriteToServer(mcsc1);
                    }
                }
            }
            catch (SqlException ex)
            {
                MessageBox.Show(ex.ToString(), "SQL Error");
            }

Y este ha sido el tutorial sobre cómo resolver problemas de codificación al parsear con DOMDocument, esperamos que te haya gustado y sepas aplicarlo en tus futuros proyectos. Ya sabes que si nos quieres proponer un tema que quieres ver reflejado como un tutorial o como una práctica, solo tienes que hacer uso del área de comentarios de un poco más abajo. Por el contrario, si quieres enviarnos tus propios tutoriales, puedes hacerlo a través de la intranet de usuarios que está habilitada para ello, a través del menú Enviar Tutorial. Ya sabes, ayúdanos a crecer con tus conocimientos. ¡Un saludo y feliz código!

COMPARTE ESTE ARTÍCULO

ENVIAR A UN AMIGO
COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN GOOGLE +
ARTÍCULO ANTERIOR

¡SÉ EL PRIMERO EN COMENTAR!
Conéctate o Regístrate para dejar tu comentario.