none
Excepción en exportación/importación de datos de Access 2007 a SqlServerExpress RRS feed

  • Pregunta

  • Hola a todos:

    Estoy realizando una exportación de datos de Access 2007 a Sql Server Express 2014 y me sale "a veces" el error descrito más abajo, no siempre lo hace con la misma tabla y no entiendo que quiere decir. Le doy al mensaje en continuar y sigue realizando la exportación / importación. No sé si tendría que añadir algo en el código para subsanar dicha excepción.

    Ocurrió ContextSwitchDeadlock
    Message: El Asistente para la depuración administrada 'ContextSwitchDeadlock' ha detectado un problema en 'C:\Users\gemma\Documents\Visual Studio 2013\Projects\FinancialSystem2016\FinancialSystem\bin\Debug\FinancialSystem.vshost.exe'.
    Información adicional: El CLR no ha podido realizar la transición del contexto COM 0x706348 al contexto COM 0x7064b8 durante 60 segundos. Es probable que el subproceso que contiene el contexto o apartamento de destino esté en espera sin proporcionar mensajes o que procese una operación de ejecución muy larga que no proporcione mensajes Windows. Normalmente, esta situación tiene un impacto negativo en el rendimiento y puede hacer que la aplicación no responda o que acumule continuamente el uso de la memoria. Para evitar este problema, todos los subprocesos de contenedores uniproceso (STA) deberían utilizar primitivos de espera que proporcionen mensajes (como CoWaitForMultipleHandles) y proporcionar mensajes regularmente durante operaciones de ejecución largas.
    

    Si alguien me lo puede explicar le quedaré agradecida.

    Un saludo.

    Gemma

    martes, 19 de enero de 2016 8:17

Respuestas

  • Hola Enrique:

    Ya tengo la solución.

    Resulta que la tabla "BalSitExpl" tiene uno de sus campos que se llama "PLAN", bueno pues parece ser que esa una palabra reservada de SQL y que no de Access. Me he dado cuenta, porque me daba un error en una consulta y digo, voy a poner la misma en el IDE del SQL y zas, veo que casca con el mismo mensaje: "Error de sintaxis cerca de la palabra PLAN". He encerrado el campo entre corchetes y arreglado.

    La consulta era muy facilita:

     cmd.CommandText = "SELECT PERIODOS, [PLAN] FROM Empresas WHERE Cod_Empresa = @empresa "

    Bueno, ya lo tenemos solucionado.

    Espero que de aquí 100 0 200 años, pueda saber la mitad de lo que tu sabes hoy.

    Un fuerte abrazo querido amigo.

    Gemma

    martes, 19 de enero de 2016 14:48
  • "gemma_campillo" escribió:

    > Resulta que la tabla "BalSitExpl" tiene uno de sus campos que se llama "PLAN",
    > bueno pues parece ser que esa una palabra reservada de SQL ...

    ¡Madre mía! ¡Te va a pasar de todo! ¿No estarás gafada? :-))

    >  He encerrado el campo entre corchetes y arreglado.

    ¡Bueno! Bromas a parte, para que no tengas que estar pendiente de encerrar el nombre de las tablas y campos entre corchetes, mejor será que le indiques al objeto CommandBuilder que los coloque automáticamente.

    Dirígete al procedimiento ImportToSqlServer, y una vez creado el objeto SqlCommandBuilder, indícale al mismo el carácter inicial y final que se utilizará para encerrar los nombres de las tablas y campos:

        Public Shared Function ImportToSqlServer(ByVal dt As DataTable) As Integer
    
            ' ...
    
            Dim cb As New SqlCommandBuilder(da)
            cb.QuotePrefix = "["
            cb.QuoteSuffix = "]"
    
    
            ' Solamente vamos a insertar nuevos registros.
            da.InsertCommand = cb.GetInsertCommand()
    
            ' ...
    
        End Function
    

     


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    • Marcado como respuesta gemma_campillo martes, 19 de enero de 2016 17:27
    martes, 19 de enero de 2016 16:26
    Moderador

Todas las respuestas

  • Confírmame si para la importación de datos a SQL Server estás utilizando los mismos procedimientos (sin tocar ni una sola línea de código a excepción de las cadenas de conexión) que te indiqué en mi última respuesta de la siguiente conversación:

    https://social.msdn.microsoft.com/Forums/es-ES/d887d1cc-9355-4a6d-acb1-33937a0ada91/importar-tabla-de-access-2007-a-sqlserrver-express?forum=vbes

    Si es así, yo al menos no tengo ni la más remota idea de que algunas veces, no todas, te aparezca el mensaje de error que indicas. ¿?


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    martes, 19 de enero de 2016 12:56
    Moderador
  • Hola Enrique:

    Es absolutamente el mismo código que me pusistes el otro día. De cualquier manera me lo hace algunas veces.

    Ahora quiero repasar los campos de la tabla en Access y sql a ver si hay algo distinto y ver si por ahí encuentro el problema, un nombre, un tipo, etc.

    Si te comento que en ese proceso para la tabla "BalSitExpl" demora bastante más que en cualquier otro, como aproximadamente unos 4 minutos. La tabla tiene 5204 registros y tiene 96 columnas. A ver si tengo que tocar algo en la base de datos sql para los tiempos de respuesta, etc. (no lo sé). Voy a repasarla desde 0, por si encuentro alguna cosa, ya que las otras tablas las pasa perfecta.

    De todas formas a ese error le doy aceptar y continuar y sigue ejecutándose todos los procesos de esa tabla y de las otras. Enrique no te preocupes que seguro que será de algún nombre o algo raro.

    Un abrazo maestro y muchas gracias.

    Gemma.

    martes, 19 de enero de 2016 13:57
  • Hola Enrique:

    Ya tengo la solución.

    Resulta que la tabla "BalSitExpl" tiene uno de sus campos que se llama "PLAN", bueno pues parece ser que esa una palabra reservada de SQL y que no de Access. Me he dado cuenta, porque me daba un error en una consulta y digo, voy a poner la misma en el IDE del SQL y zas, veo que casca con el mismo mensaje: "Error de sintaxis cerca de la palabra PLAN". He encerrado el campo entre corchetes y arreglado.

    La consulta era muy facilita:

     cmd.CommandText = "SELECT PERIODOS, [PLAN] FROM Empresas WHERE Cod_Empresa = @empresa "

    Bueno, ya lo tenemos solucionado.

    Espero que de aquí 100 0 200 años, pueda saber la mitad de lo que tu sabes hoy.

    Un fuerte abrazo querido amigo.

    Gemma

    martes, 19 de enero de 2016 14:48
  • "gemma_campillo" escribió:

    > Resulta que la tabla "BalSitExpl" tiene uno de sus campos que se llama "PLAN",
    > bueno pues parece ser que esa una palabra reservada de SQL ...

    ¡Madre mía! ¡Te va a pasar de todo! ¿No estarás gafada? :-))

    >  He encerrado el campo entre corchetes y arreglado.

    ¡Bueno! Bromas a parte, para que no tengas que estar pendiente de encerrar el nombre de las tablas y campos entre corchetes, mejor será que le indiques al objeto CommandBuilder que los coloque automáticamente.

    Dirígete al procedimiento ImportToSqlServer, y una vez creado el objeto SqlCommandBuilder, indícale al mismo el carácter inicial y final que se utilizará para encerrar los nombres de las tablas y campos:

        Public Shared Function ImportToSqlServer(ByVal dt As DataTable) As Integer
    
            ' ...
    
            Dim cb As New SqlCommandBuilder(da)
            cb.QuotePrefix = "["
            cb.QuoteSuffix = "]"
    
    
            ' Solamente vamos a insertar nuevos registros.
            da.InsertCommand = cb.GetInsertCommand()
    
            ' ...
    
        End Function
    

     


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    • Marcado como respuesta gemma_campillo martes, 19 de enero de 2016 17:27
    martes, 19 de enero de 2016 16:26
    Moderador
  • Hola maestro:

    EL gafe me lo estoy cargando por las malas ya que no ha querido ir de buenas.

    Bueno, cosas que pasan. Ya había corregido todo el "PLAN", pero he añadido tus prefijos [] para que en un futuro no me preocupe de ello.

    Está funcionando muy bien, ahora estoy corriendo algún procedimiento almacenado en sql que me ha ido perfecto el que los tuviera ya hechos en Access. Funciona perfectamente. A seguir.

    Maestro, gracias por todo, nada más, ya lo sabes.

    Un abrazo.

    Gemma


    martes, 19 de enero de 2016 17:24