Pasar una tabla de sqlserver a xml

Preguntado hace 1 año

Fernando Calle
Votos
PositivosNegativosTotal
1 0 1
77 Visualizaciones
Compártelo: Compártelo en twitterCompártelo en Facebook

Buenas, tengo que migrar una serie de tablas de mi base de datos a xml cada cierto tiempo. La idea es crear un job que cada x tiempo pase el contenido de unas tablas a formato xml y lo guarde en una carpeta del disco (del que otra aplicación lo recogerá por ftp).

Los nombres de los nodos pueden coincidir con el nombre de la tabla y el nombre de los campos. Es decir:

Clientes

idCliente

nombre

contacto

direccion

Podría ser Clientes.xml

<datos>
<clientes>
<idCliente>1</idCliente>
<nombre>Pepe SL</nombre>
<contacto>Pepe</contacto>
<direccion>Calle Loquesea 15</direccion>
</clientes>
<clientes>
<idCliente>2</idCliente>
<nombre>Juan SL</nombre>
<contacto>Juan</contacto>
<direccion>Calle Loquesea 14</direccion>
</clientes>
</datos>

¿Hay algo más o menos automático que pase una tabla a xml?

Actualizando datos

1 Respuesta

Hace 1 año

Buck

Buck

751Distinciones de plata1Distinciones de bronce3
Votos
PositivosNegativosTotal
202

Si estas usando .NET es muy sencillo:

1-Lees la informacion de la base de datos a un dataset (yo te recomendaria tiparlo pero si no esta tipado tb te funcionara) 2-Lo serializas en XML a un fihcero.

Mira este codigo de ejemplo, en lugar de leerlo de la base de datos estoy rellenando el dataset en tiempo de ejecucion

        Clientes clientesDataSet = new Clientes();
        for (int i = 0; i < 10; i++)
        {
            Clientes.ClientesTableRow row = clientesDataSet.ClientesTable.NewClientesTableRow();
            row.IdCliente = i.ToString() ;
            row.Nombre = "Cliente " + i;
            row.Direccion = "Direccion " + i;
            clientesDataSet.ClientesTable.AddClientesTableRow(row);    
        }
        clientesDataSet.ClientesTable.WriteXml("Clientes.xml");

El resultado es un xml que tiene esta pinta

<?xml version="1.0" standalone="yes"?>
<Clientes xmlns="http://tempuri.org/Clientes.xsd">
  <ClientesTable>
    <IdCliente>0</IdCliente>
    <Nombre>Cliente 0</Nombre>
    <Direccion>Direccion 0</Direccion>
  </ClientesTable>
  <ClientesTable>
    <IdCliente>1</IdCliente>
    <Nombre>Cliente 1</Nombre>
    <Direccion>Direccion 1</Direccion>
  </ClientesTable>
  <ClientesTable>
    <IdCliente>2</IdCliente>
    <Nombre>Cliente 2</Nombre>
    <Direccion>Direccion 2</Direccion>
  </ClientesTable>
  <ClientesTable>
    <IdCliente>3</IdCliente>
    <Nombre>Cliente 3</Nombre>
    <Direccion>Direccion 3</Direccion>
  </ClientesTable>
  <ClientesTable>
    <IdCliente>4</IdCliente>
    <Nombre>Cliente 4</Nombre>
    <Direccion>Direccion 4</Direccion>
  </ClientesTable>
  <ClientesTable>
    <IdCliente>5</IdCliente>
    <Nombre>Cliente 5</Nombre>
    <Direccion>Direccion 5</Direccion>
  </ClientesTable>
  <ClientesTable>
    <IdCliente>6</IdCliente>
    <Nombre>Cliente 6</Nombre>
    <Direccion>Direccion 6</Direccion>
  </ClientesTable>
  <ClientesTable>
    <IdCliente>7</IdCliente>
    <Nombre>Cliente 7</Nombre>
    <Direccion>Direccion 7</Direccion>
  </ClientesTable>
  <ClientesTable>
    <IdCliente>8</IdCliente>
    <Nombre>Cliente 8</Nombre>
    <Direccion>Direccion 8</Direccion>
  </ClientesTable>
  <ClientesTable>
    <IdCliente>9</IdCliente>
    <Nombre>Cliente 9</Nombre>
    <Direccion>Direccion 9</Direccion>
  </ClientesTable>
</Clientes>
Cerrar

Finalmente me quedo con la opción de .net :) Será un servicio que funcione cada x tiempo, muchas gracias, Antonio. Fernando Calle hace 1 año
Prueba con bcp. Desde linea de comandos: bcp "SELECT * FROM [nombredeBD]..CLIENTES FOR XML RAW" queryout c:\clientes.xml -Sserver -Uusername -Ppassword -c -r -t El xml que genera no esta muy alla. Si tienes acceso a un SQL server 2005 o superior con SSIS creo que puedes hacer una tarea de exportacion que lo genere. En el peor de los casos puedes aniadir un procedimiento almacenado CLR al sqlServer http://msdn.microsoft.com/es-es/library/5czye81z(v=VS.80).aspx en el que ejecutas codigo .net arriba descrito Buck hace 1 año
Muchas gracias, Antonio, tiene muy buena pinta, pensaba hacerlo sólo con base de datos, ¿sería posible sólo con sqlserver? Saludos. Fernando Calle hace 1 año

Tu respuesta

Confirmación

Cerrar

Si sales ahora, perderás los cambios. ¿Estás seguro de querer salir?

Para participar en Babelias, debes estar convenientemente validado. Si ya eres usuario inicia sesión, si no lo eres, te puedes registrar.

Dar una respuesta

Trata de ser descriptivo, usa al menos 25 caracteres