none
pasar datos desde SQL2005 hacia SQLCE RRS feed

  • Pregunta

  • Saludos.

    Tengo un servidor corriendo SQL 2005  y deseo pasar los registros de una tabla hacia una base de datos SQLCE ubicada en unos de las estaciones clientes.

    Deseo hacerlo desde Visual basic .net.

    me explico: Hay una Base de datos que tiene una serie de tablas, de una de esas tablas deseo pasar todos los registros (pero solo ciertos campos) a una base de datos de SQLCE (database.sdf) que esta en una de la estaciones y todo desde VB .net...?

    Alguna sugerencia..? Si no, por lo menos como pasar los datos usando SQL Server Management Studio, pero no logro ver como hacerlo. No tengo integrations services, solo el motor de base de datos.

    Mil gracias.





    Edward Ocando
    Mi blog
    eocando@ingen.com.ve
    Desarrollador: VB .NET, C# Visual FoxPro, PHP, JavaScript, Ajax, MS SQL, mySQL.
    viernes, 18 de diciembre de 2009 21:43

Respuestas

  • Hola, Edward:

    Entiendo que si tienes un objeto DataTable con los datos que deseas pasar a la tabla de la base de SQLCE, puedes utilizar el método Update de un objeto SqlCeDataAdapter, debidamente configurado, para insertar los registros existentes en dicho objeto DataTable.

    Imagina que en ambas bases de datos tienes la típica tabla de Clientes, y solamente deseas añadir los campos IdCliente, Nombre y Domicilio de todos los registros existentes en la tabla de SQL Server. Pues actuarías de la siguiente manera.

    1º) Rellenar un objeto DataTable con los datos de la base de SQL Server:

    Imports System.Data.SqlServerCe
    Imports System.Data.SqlClient

            Using cnn As New SqlConnection( _
                "Data Source=(local);" & _
                "Initial Catalog=Prueba;" & _
                "Integrated Security=SSPI")

                Dim sql As String = "SELECT IdCliente, Nombre, Domicilio FROM Clientes"

                Dim da As New SqlDataAdapter(sql, cnn)

                Dim dt As New DataTable("Clientes")

                da.Fill(dt)

                DataGridView1.DataSource = dt

            End Using

    2º) Insertar los registros en la tabla de la base de SQLCE:

    Para ello te puede servir el siguiente procedimiento:

    Private Sub ImportData(ByVal dt As DataTable)

            If dt Is Nothing Then Return

            Try
                ' Para que se pueda actualizar los datos, el valor de la propiedad RowState
                ' de los objetos DataRow tiene que ser distinta a Unchanged, por lo que de
                ' ser así, la pasaremos a Added.
                '
                For Each row As DataRow In dt.Rows
                    If row.RowState = DataRowState.Unchanged Then
                        row.SetAdded()
                    End If
                Next

                ' Configuramos la conexión con la base de datos de SQLCE
                '
                Using cnn As New SqlCeConnection("Data Source=C:\Bases\DataBase.sdf")

                    ' La consulta SQL de selección no devolverá registros.
                    '
                    Dim sql As String = _
                        "SELECT IdCliente, Nombre, Domicilio FROM Clientes WHERE 1=0"

                    Dim da As New SqlCeDataAdapter(sql, cnn)

                    ' Configuramos un objeto CommandBuilder únicamente para insertar datos
                    '             
                    Dim cb As New SqlCeCommandBuilder(da)

                    da.InsertCommand = cb.GetInsertCommand

                    ' Añadimos las filas a la tabla de la base de SQLCE
                    '
                    Dim n As Integer = da.Update(dt)

                    MessageBox.Show("Nª de registros afectados: " & CStr(n))

                End Using

            Catch ex As Exception
                MessageBox.Show(ex.Message)

            End Try

        End Sub

    Al procedimiento, simplemente lo llamarías pasándole el objeto DataTable que tienes rellenado del paso 1:

          ImportData(objetoDataTable)

    Ten en cuenta que lo explicado, tal cual está, sólo sierve para AÑADIR NUEVOS REGISTROS  a la tabla de la base de SQLCE. Si deseas modificar o eliminar registros, tendrías primero que ELIMINAR TODOS LOS REGISTROS de la tabla de SQLCE.

    Lo mismo hay por ahí otros métodos más prácticos y eficientes, pero por ahora, éste es el único que conozco. :-)

    Un saludo y ¡Feliz Navidad!




    Enrique Martínez [MS MVP - VB]
    domingo, 20 de diciembre de 2009 7:54
    Moderador

Todas las respuestas

  • hola

    se me ocurre que por ahi esto ayude

    Microsoft Sync Framework

    Sync Services for ADO.NET 2.0



    como veras es un team que deberas aprender si necesitas usarlo

    el team con el manager studio del sql server es que aqui no podras abrir base de datos .sdf, aunque por ahi si desde el VS te conectas a las dos dbs, la de sqls erver  y la .sdf podrias copiar datos de una a otra, pero eso sis eguramente la estructura deberia ser la misma

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    sábado, 19 de diciembre de 2009 23:59
  • Hola, Edward:

    Entiendo que si tienes un objeto DataTable con los datos que deseas pasar a la tabla de la base de SQLCE, puedes utilizar el método Update de un objeto SqlCeDataAdapter, debidamente configurado, para insertar los registros existentes en dicho objeto DataTable.

    Imagina que en ambas bases de datos tienes la típica tabla de Clientes, y solamente deseas añadir los campos IdCliente, Nombre y Domicilio de todos los registros existentes en la tabla de SQL Server. Pues actuarías de la siguiente manera.

    1º) Rellenar un objeto DataTable con los datos de la base de SQL Server:

    Imports System.Data.SqlServerCe
    Imports System.Data.SqlClient

            Using cnn As New SqlConnection( _
                "Data Source=(local);" & _
                "Initial Catalog=Prueba;" & _
                "Integrated Security=SSPI")

                Dim sql As String = "SELECT IdCliente, Nombre, Domicilio FROM Clientes"

                Dim da As New SqlDataAdapter(sql, cnn)

                Dim dt As New DataTable("Clientes")

                da.Fill(dt)

                DataGridView1.DataSource = dt

            End Using

    2º) Insertar los registros en la tabla de la base de SQLCE:

    Para ello te puede servir el siguiente procedimiento:

    Private Sub ImportData(ByVal dt As DataTable)

            If dt Is Nothing Then Return

            Try
                ' Para que se pueda actualizar los datos, el valor de la propiedad RowState
                ' de los objetos DataRow tiene que ser distinta a Unchanged, por lo que de
                ' ser así, la pasaremos a Added.
                '
                For Each row As DataRow In dt.Rows
                    If row.RowState = DataRowState.Unchanged Then
                        row.SetAdded()
                    End If
                Next

                ' Configuramos la conexión con la base de datos de SQLCE
                '
                Using cnn As New SqlCeConnection("Data Source=C:\Bases\DataBase.sdf")

                    ' La consulta SQL de selección no devolverá registros.
                    '
                    Dim sql As String = _
                        "SELECT IdCliente, Nombre, Domicilio FROM Clientes WHERE 1=0"

                    Dim da As New SqlCeDataAdapter(sql, cnn)

                    ' Configuramos un objeto CommandBuilder únicamente para insertar datos
                    '             
                    Dim cb As New SqlCeCommandBuilder(da)

                    da.InsertCommand = cb.GetInsertCommand

                    ' Añadimos las filas a la tabla de la base de SQLCE
                    '
                    Dim n As Integer = da.Update(dt)

                    MessageBox.Show("Nª de registros afectados: " & CStr(n))

                End Using

            Catch ex As Exception
                MessageBox.Show(ex.Message)

            End Try

        End Sub

    Al procedimiento, simplemente lo llamarías pasándole el objeto DataTable que tienes rellenado del paso 1:

          ImportData(objetoDataTable)

    Ten en cuenta que lo explicado, tal cual está, sólo sierve para AÑADIR NUEVOS REGISTROS  a la tabla de la base de SQLCE. Si deseas modificar o eliminar registros, tendrías primero que ELIMINAR TODOS LOS REGISTROS de la tabla de SQLCE.

    Lo mismo hay por ahí otros métodos más prácticos y eficientes, pero por ahora, éste es el único que conozco. :-)

    Un saludo y ¡Feliz Navidad!




    Enrique Martínez [MS MVP - VB]
    domingo, 20 de diciembre de 2009 7:54
    Moderador
  • Hola Edward!

    ¿Las informaciones fueran útiles para solucionar su problema?

    Saludos!

    Rafael Fagundes - Marque la respuesta como correcta si te ha sido de utilidad!
    martes, 22 de diciembre de 2009 18:31
    Moderador
  • Hola tengo un  problema con mi Windwos 7 es 100% original .. pero algo q no entiendo es como instalar correctamente SQL server 2005 en mi PC .. si me pudieran decir los link para descargar los SQL 2005 correctos y completos para crear un server
    envienmelos a mi correo porfavor : the_play_now@hotmail.com

    martes, 13 de diciembre de 2011 16:55