none
pasar datos de un archivo excel 2007 a una base de datos sqlexpress RRS feed

  • Pregunta

  • un saludo a todos, tengo este problema, estoy desarrollando una aplicacion para hacer mas facil el registro de notas de un instituto, la base de datos me la mandan en formato excel con estas caracteristicas:

    PERIODO materia seccion matricula nombres
    20112 AAE563 1541 15299494 ACOSTA GARCIA LISBETH LISSETH
    20112 AAE563 1541 20443787 AMATO FERNANDEZ ORIANA ANDREINA
    20112 AAE563 1541 14248292 BRICEÑO GOMEZ LEANNY VICTORIA

    en mi base de datos tengo las siguientes tablas:

    periodo, materia, seccion, alumnos

    necesito un codigo que me pase a mi base de datos la informacion dada en el archivo excel y no se como hacerlo, ya que el archivo tiene la informacion de todas las tablas juntas.


    daniel muñoz
    domingo, 25 de septiembre de 2011 5:11

Respuestas

  • "daniel muñoz" preguntó:

    > en mi base de datos tengo las siguientes tablas:
    >
    > periodo, materia, seccion, alumnos
    >
    > necesito un codigo que me pase a mi base de datos la informacion
    > dada en el archivo excel y no se como hacerlo, ya que el archivo
    > tiene la informacion de todas las tablas juntas.

    Hola, Daniel:

    Está bien que tengas 4 tablas en tu base de datos de SQL Server Express, pero ¿el esquema de cada tabla coincide con el esquema de la hoja de cálculo de Excel que has indicado en tu mensaje?

    Hay un campo que se llame 'PERIODO', que a lo mejor coincide con el nombre de un campo existente en la tabla 'Periodo', y otro nombre llamado 'materia' que lo mismo coincide con el de igual nombre existente en la tabla llamada 'Materia'.

    Si el esquema de la hoja de cálculo no coincide con los esquemas de las tablas, no te va a quedar más remedio que ejecutar tantas consultas SQL de selección como tablas de tu base de datos desees rellenar. Es decir, que si tienes cuatro tablas, tendrás que ejecutar cuatro consultas SQL de selección para añadir las filas a la correspondiente tabla de SQL Server.

    Has comentado que utilizas SQLExpress, pero no has indicado si estás trabajando con una base de datos residente en un servidor con nombre llamado 'SQLExpress', o estás utilizando un simple archivo de datos de SQL Server mediante instancias de usuario. Vamos a suponer que se trata de ésto último.

    Inserta en tu formulario, clase o módulo, los siguientes procedimientos:

    Imports System.Data.OleDb
    Imports System.Data.SqlClient
    
        Private cadenaConexion As String = _
            "Data Source=.\SQLEXPRESS;" & _
            "AttachDbFilename=C:\Bases\Nombre_Archivo.mdf;" & _
            "Integrated Security=True;" & _
            "Connect Timeout=30;" & _
            "User Instance=True"
    
        ''' <summary>
        ''' Devuelve un objeto DataTable como resultado de ejecutar
        ''' una consulta SQL de selección en un archivo de Excel.
        ''' </summary>
        ''' <author>Enrique Martínez Montejo - 2010</author>
        ''' <param name="fileNameExcel">Ruta del libro de trabajo de Excel.</param>
        ''' <param name="query">Consulta SQL de selección.</param>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Function GetDataExcel(ByVal fileNameExcel As String, _
                                     ByVal query As String) As DataTable
    
            ' Comprobación de parámetros.
            '
            If ((String.IsNullOrEmpty(fileNameExcel)) OrElse _
                (String.IsNullOrEmpty(query))) Then _
                Throw New ArgumentNullException()
    
            Try
                ' Configuramos una conexión con el origen de datos.
                '
                Dim connString As String = String.Format( _
                    "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                    "Extended Properties='Excel 12.0 Xml;';" & _
                    "Data Source={0}", fileNameExcel)
    
                Using cnn As New OleDbConnection(connString)
    
                    Dim cmd As OleDbCommand = cnn.CreateCommand()
                    cmd.CommandText = query
    
                    Dim da As New OleDbDataAdapter(cmd)
    
                    Dim dt As New DataTable()
    
                    da.Fill(dt)
    
                    Return dt
    
                End Using
    
            Catch ex As Exception
                Throw
    
            End Try
    
        End Function
    
        ''' <summary>
        ''' Inserta en una tabla de la base de datos Microsoft SQL Server especificada,
        ''' los datos existentes actualmente en el objeto DataTable.
        ''' </summary>
        ''' <author>Enrique Martínez Montejo - 2008</author>
        ''' <param name="dt">Un objeto DataTable válido.</param>
        ''' <param name="tableName">El nombre de la tabla.</param>
        ''' <returns>Devuelve el número de registros afectados.</returns>
        ''' <remarks></remarks>
        Public Function BulkCopyToSqlServer(ByVal dt As DataTable, _
                                            ByVal tableName As String) As Integer
    
            ' Comprobación de parámetros.
            '
            If ((dt Is Nothing) OrElse _
                (String.IsNullOrEmpty(tableName))) Then _
                Throw New ArgumentNullException()
    
            Try
                ' Establezco una conexión con la base de datos de SQL Server.
                '
                Using cnn As New SqlConnection(cadenaConexion)
    
                    ' Abrimos la conexión.
                    '
                    cnn.Open()
    
                    ' Cuento los registros iniciales existentes en la tabla.
                    '
                    Dim cmd As SqlCommand = cnn.CreateCommand()
                    cmd.CommandText = "SELECT COUNT(*) FROM " & tableName
                    Dim countStart As Int32 = CInt(cmd.ExecuteScalar())
    
                    ' Ejecuto la copia masiva de registros.
                    '
                    Using bulkCopy As SqlBulkCopy = New SqlBulkCopy(cnn)
                        bulkCopy.DestinationTableName = tableName
                        bulkCopy.WriteToServer(dt)
                    End Using
    
                    ' Cuento los registros existentes en la tabla.
                    '
                    cmd.CommandText = "SELECT COUNT(*) FROM " & tableName
                    Dim countEnd As Int32 = CInt(cmd.ExecuteScalar())
    
                    ' Devuelvo la diferencia de registros.
                    '
                    Return countEnd - countStart
    
                End Using
    
            Catch ex As Exception
                ' Devuelvo la excepción
                Throw
    
            End Try
    
        End Function
    

    Cuando desees insertar los datos en la tabla 'Periodo', ejecutarías lo siguiente:

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            Try
                ' Construimos la consulta SQL de selección que
                ' deseamos ejecutar, indicando únicamente los
                ' campos de la hoja de cálculo cuyos valores
                ' deseamos obtener.
                '
                Dim sql As String = _
                    "SELECT Periodo, Campo2, Campo3, Campo4 FROM [Hoja1$]"
                
                ' Obtenemos un objeto DataTable.
                '
                Dim dt As DataTable = _
                  GetDataExcel("C:\Mis documentos\Libro1.xlsx", sql)
    
                Dim n As Integer
    
                If (dt.Rows.Count > 0) Then
                    ' Copiamos los datos en la tabla Periodo de la
                    ' base de SQL Server.
                    '
                    n = BulkCopyToSqlServer(dt, "Periodo")
    
                End If
    
                MessageBox.Show("Nº de registros insertados: " & CStr(n))
    
            Catch ex As Exception
                MessageBox.Show(ex.Message)
    
            End Try
    
        End Sub
    

    Fíjate que al nombre de la hoja de cálculo de Excel le tienes que añadir el carácter $. Si en lugar de una hoja completa de cálculo, deseas especificar el rango de un conjunto de celdas, la consulta SQL sería la siguiente:

        Dim sql As String = _
         "SELECT Periodo, Campo2, Campo3, Campo4 FROM [Hoja1$A1:C6]"
    

    Cuando desees añadir datos a la tabla llamada 'Materia', la consulta que deberás ejecutar es la siguiente:

        Dim sql As String = _
         "SELECT Materia, Campo2, Campo3, Campo4 FROM [Hoja1$]"
    

    Y llamar a la función 'BulkCopyToSqlServer' de la siguiente manera:

        n = BulkCopyToSqlServer(dt, "Materia")
    

    Es decir, especificando el nombre de la tabla de la base de SQL Server donde se van a insertar los nuevos registros.

    Por último, si en lugar de tratarse de un archivo de datos de SQL Server, tu base de datos reside en una instancia SQL Server con nombre llamada 'SQLExpress', entonces la cadena de conexión que deberás de utilizar es la siguiente:

        Private cadenaConexion As String = _
            "Data Source=.\SQLEXPRESS;" & _
            "Initial Catalog=Nombre_Base_Datos;" & _
            "Integrated Security=True;"
    

    ¡Eso es todo! Adapta el ejemplo a tus necesidades.

    Un saludo

     


    Enrique Martínez
      [MS MVP - VB]

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

    domingo, 25 de septiembre de 2011 8:51
    Moderador

Todas las respuestas

  • "daniel muñoz" preguntó:

    > en mi base de datos tengo las siguientes tablas:
    >
    > periodo, materia, seccion, alumnos
    >
    > necesito un codigo que me pase a mi base de datos la informacion
    > dada en el archivo excel y no se como hacerlo, ya que el archivo
    > tiene la informacion de todas las tablas juntas.

    Hola, Daniel:

    Está bien que tengas 4 tablas en tu base de datos de SQL Server Express, pero ¿el esquema de cada tabla coincide con el esquema de la hoja de cálculo de Excel que has indicado en tu mensaje?

    Hay un campo que se llame 'PERIODO', que a lo mejor coincide con el nombre de un campo existente en la tabla 'Periodo', y otro nombre llamado 'materia' que lo mismo coincide con el de igual nombre existente en la tabla llamada 'Materia'.

    Si el esquema de la hoja de cálculo no coincide con los esquemas de las tablas, no te va a quedar más remedio que ejecutar tantas consultas SQL de selección como tablas de tu base de datos desees rellenar. Es decir, que si tienes cuatro tablas, tendrás que ejecutar cuatro consultas SQL de selección para añadir las filas a la correspondiente tabla de SQL Server.

    Has comentado que utilizas SQLExpress, pero no has indicado si estás trabajando con una base de datos residente en un servidor con nombre llamado 'SQLExpress', o estás utilizando un simple archivo de datos de SQL Server mediante instancias de usuario. Vamos a suponer que se trata de ésto último.

    Inserta en tu formulario, clase o módulo, los siguientes procedimientos:

    Imports System.Data.OleDb
    Imports System.Data.SqlClient
    
        Private cadenaConexion As String = _
            "Data Source=.\SQLEXPRESS;" & _
            "AttachDbFilename=C:\Bases\Nombre_Archivo.mdf;" & _
            "Integrated Security=True;" & _
            "Connect Timeout=30;" & _
            "User Instance=True"
    
        ''' <summary>
        ''' Devuelve un objeto DataTable como resultado de ejecutar
        ''' una consulta SQL de selección en un archivo de Excel.
        ''' </summary>
        ''' <author>Enrique Martínez Montejo - 2010</author>
        ''' <param name="fileNameExcel">Ruta del libro de trabajo de Excel.</param>
        ''' <param name="query">Consulta SQL de selección.</param>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Function GetDataExcel(ByVal fileNameExcel As String, _
                                     ByVal query As String) As DataTable
    
            ' Comprobación de parámetros.
            '
            If ((String.IsNullOrEmpty(fileNameExcel)) OrElse _
                (String.IsNullOrEmpty(query))) Then _
                Throw New ArgumentNullException()
    
            Try
                ' Configuramos una conexión con el origen de datos.
                '
                Dim connString As String = String.Format( _
                    "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                    "Extended Properties='Excel 12.0 Xml;';" & _
                    "Data Source={0}", fileNameExcel)
    
                Using cnn As New OleDbConnection(connString)
    
                    Dim cmd As OleDbCommand = cnn.CreateCommand()
                    cmd.CommandText = query
    
                    Dim da As New OleDbDataAdapter(cmd)
    
                    Dim dt As New DataTable()
    
                    da.Fill(dt)
    
                    Return dt
    
                End Using
    
            Catch ex As Exception
                Throw
    
            End Try
    
        End Function
    
        ''' <summary>
        ''' Inserta en una tabla de la base de datos Microsoft SQL Server especificada,
        ''' los datos existentes actualmente en el objeto DataTable.
        ''' </summary>
        ''' <author>Enrique Martínez Montejo - 2008</author>
        ''' <param name="dt">Un objeto DataTable válido.</param>
        ''' <param name="tableName">El nombre de la tabla.</param>
        ''' <returns>Devuelve el número de registros afectados.</returns>
        ''' <remarks></remarks>
        Public Function BulkCopyToSqlServer(ByVal dt As DataTable, _
                                            ByVal tableName As String) As Integer
    
            ' Comprobación de parámetros.
            '
            If ((dt Is Nothing) OrElse _
                (String.IsNullOrEmpty(tableName))) Then _
                Throw New ArgumentNullException()
    
            Try
                ' Establezco una conexión con la base de datos de SQL Server.
                '
                Using cnn As New SqlConnection(cadenaConexion)
    
                    ' Abrimos la conexión.
                    '
                    cnn.Open()
    
                    ' Cuento los registros iniciales existentes en la tabla.
                    '
                    Dim cmd As SqlCommand = cnn.CreateCommand()
                    cmd.CommandText = "SELECT COUNT(*) FROM " & tableName
                    Dim countStart As Int32 = CInt(cmd.ExecuteScalar())
    
                    ' Ejecuto la copia masiva de registros.
                    '
                    Using bulkCopy As SqlBulkCopy = New SqlBulkCopy(cnn)
                        bulkCopy.DestinationTableName = tableName
                        bulkCopy.WriteToServer(dt)
                    End Using
    
                    ' Cuento los registros existentes en la tabla.
                    '
                    cmd.CommandText = "SELECT COUNT(*) FROM " & tableName
                    Dim countEnd As Int32 = CInt(cmd.ExecuteScalar())
    
                    ' Devuelvo la diferencia de registros.
                    '
                    Return countEnd - countStart
    
                End Using
    
            Catch ex As Exception
                ' Devuelvo la excepción
                Throw
    
            End Try
    
        End Function
    

    Cuando desees insertar los datos en la tabla 'Periodo', ejecutarías lo siguiente:

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            Try
                ' Construimos la consulta SQL de selección que
                ' deseamos ejecutar, indicando únicamente los
                ' campos de la hoja de cálculo cuyos valores
                ' deseamos obtener.
                '
                Dim sql As String = _
                    "SELECT Periodo, Campo2, Campo3, Campo4 FROM [Hoja1$]"
                
                ' Obtenemos un objeto DataTable.
                '
                Dim dt As DataTable = _
                  GetDataExcel("C:\Mis documentos\Libro1.xlsx", sql)
    
                Dim n As Integer
    
                If (dt.Rows.Count > 0) Then
                    ' Copiamos los datos en la tabla Periodo de la
                    ' base de SQL Server.
                    '
                    n = BulkCopyToSqlServer(dt, "Periodo")
    
                End If
    
                MessageBox.Show("Nº de registros insertados: " & CStr(n))
    
            Catch ex As Exception
                MessageBox.Show(ex.Message)
    
            End Try
    
        End Sub
    

    Fíjate que al nombre de la hoja de cálculo de Excel le tienes que añadir el carácter $. Si en lugar de una hoja completa de cálculo, deseas especificar el rango de un conjunto de celdas, la consulta SQL sería la siguiente:

        Dim sql As String = _
         "SELECT Periodo, Campo2, Campo3, Campo4 FROM [Hoja1$A1:C6]"
    

    Cuando desees añadir datos a la tabla llamada 'Materia', la consulta que deberás ejecutar es la siguiente:

        Dim sql As String = _
         "SELECT Materia, Campo2, Campo3, Campo4 FROM [Hoja1$]"
    

    Y llamar a la función 'BulkCopyToSqlServer' de la siguiente manera:

        n = BulkCopyToSqlServer(dt, "Materia")
    

    Es decir, especificando el nombre de la tabla de la base de SQL Server donde se van a insertar los nuevos registros.

    Por último, si en lugar de tratarse de un archivo de datos de SQL Server, tu base de datos reside en una instancia SQL Server con nombre llamada 'SQLExpress', entonces la cadena de conexión que deberás de utilizar es la siguiente:

        Private cadenaConexion As String = _
            "Data Source=.\SQLEXPRESS;" & _
            "Initial Catalog=Nombre_Base_Datos;" & _
            "Integrated Security=True;"
    

    ¡Eso es todo! Adapta el ejemplo a tus necesidades.

    Un saludo

     


    Enrique Martínez
      [MS MVP - VB]

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

    domingo, 25 de septiembre de 2011 8:51
    Moderador
  • hola enrique buen aporte, dejame estudiarlo y ver si me puede funcionar, te comento, las base de datos la estoy creando yo para la aplicacion de acuerdo con un formato en excel que es donde lleno la informacion de las notas, pero los listados me los dan en otro archivo excel con otro formato, tipo base de datos que es la informacion que coloco en los cuadros arriba.

    mi base de datos la cree de cero este es un ejemplo al menos con esas tablas que vienen en el archivo porque la base de datos tiene mas tablas pero estas son las que tienen que coincidir con el archivo excel que me dan:

    periodo  :  id_periodo(clave principal), id_instituto(clave foranea), periodo                

    materia  :  id_materia(clave principal), id_seccion(clave foranea), cod_materia, materia

    seccion   : id_seccion(clave principal), id_periodo(clave foranea), seccion

    alumno   : id_alumno(clave principal) id_materia(clave foranea), matricula, nombresYApellidos, etc.

    de estos campos que aparecen en las tablas solo estas: periodo, materia (que vendria siendo el codigo de la materia), seccion, maticula, nombres.

    son los que me dan en el archivo de excel.

    yo supuse que tendria que hacer una consulta por cada tabla pero no se como setear las claves foraneas para que coincidan con las claves primarias a las que pertenecen.

    ejem:

    el registro va a ser de la siguiente manera, tengo un profesor que puede trabajar para varios institutos, cada instituto tiene un periodo lectivo, y cada periodo lectivo tiene sus secciones, cada seccion tiene sus materias y cada materia tiene sus alumnos

    al pasar por ejemplo los datos del periodo estos tiene que estar relacionados con el instituto en cuestion, y cuando pase los datos de la seccion estos tienen que estar relacionados con el periodo al que pertenecen, si el periodo es 20112(año 2011, periodo 2) las secciones deben pertenecer a ese periodo porque en el siguiente periodo vendria siendo 20121(año 2012, periodo 1) y tendra otras secciones que pueden ser la misma descripcion de las secciones anteriores.

    no se si me explico bien. 

     lo otro es que el que vaya a usar el programa tiene que tener la facilidad de llamar al archivo de donde va a sacar esta informacion para agregarla a la base de datos esto quiere decir debo tener la posibilidad de darle la direccion del archivo excel a traves de un textbox

    domingo, 25 de septiembre de 2011 18:06
  • "daniel muñoz" escribió:

    > te comento, las base de datos la estoy creando yo para la
    > aplicacion de acuerdo con un formato en excel que es donde
    > lleno la informacion de las notas, pero los listados me los
    > dan en otro archivo excel con otro formato, tipo base de
    > datos que es la informacion que coloco en los cuadros arriba.

    Si vas a estás trabajando cada dos por tres con la información que te proporcionan en el archivo de Excel, lo más sensato que puedes hacer es crear un servidor vinculado en el propio servidor de SQL Server que apunte al archivo de Excel. Esto hará que trabajes con los datos de Excel como si se tratara de una tabla más existente en tu base de SQL Server, con lo que podrás ejecutar las consultas T-SQL de selección y acción que estimes conveniente, de una manera mucho más sencilla, sin necesidad de rellenar objetos DataTable y utilizar el comando BulkCopy.

    Pero el tema de los servidores vinculados se sale fuera del contenido de éste foro, por lo que si estás interesado en el tema, te aconsejaría que consultaras dicho tema en los Libros en Pantalla de Microsoft SQL Server, y para las dudas que te aparezcan, las efectuases en el foro en español de SQL Server.

    > lo otro es que el que vaya a usar el programa tiene que tener
    > la facilidad de llamar al archivo de donde va a sacar esta
    > informacion para agregarla a la base de datos esto quiere decir
    > debo tener la posibilidad de darle la direccion del archivo
    > excel a traves de un textbox

    Si vas a utilizar un servidor vinculado, que repito es la opción más factible que puedes usar, el archivo de Excel no puede estar una veces en C:\Mis documentos y otras veces en H:\Archivos; tiene que estar disponible en una carpeta concreta, que será aquella que indicastes a la hora de crear el servidor vinculado.

    Si tu aplicación de Visual Basic va a estar alojada en una carpeta llamada 'C:\NombreAplicacion', dentro de ella puedes crearte una subcarpeta llamada 'Temp', donde puedes guardar los archivos de Excel que te proporcionen.

    A la hora de ejecutar el procedimiento almacenado sp_addlinkedserver para crear el servidor vinculado, especificarías la ruta 'C:\NombreAplicacion\Temp\NombreArchivo.xlsx' para que SQL Server sepa dónde tiene que buscar el archivo de Excel para efectuar las consultas, por tanto, no permitas que el usuario de tu aplicación tenga la posibilidad de obtener la dirección del archivo de Excel, porque a mi manera de entender el asunto en cuestión, eso es poco serio. :-)

    Bote pronto parece que el tema de los servidores vinculados parece un tema complicado, y si lo conocieras, te darías cuenta que es una cuestión de 'coser y cantar'. Si alguna vez has trabajado con tablas vinculadas en un archivo de Access, te darás cuenta que el servidor vinculado trabaja de la misma manera.

    > yo supuse que tendria que hacer una consulta por cada tabla
    > pero no se como setear las claves foraneas para que
    > coincidan con las claves primarias a las que pertenecen.

    Esta es otra consulta que deberías de realizarla en el foro de SQL Server, donde los usuarios de allí están más acostumbrados a estar todo el día ejecutando consultas T-SQL, bien de selección bien de acción.

    Para añadir nuevos registros a una tabla existente, la única consulta SQL que puedes ejecutar es una consulta INSERT, que puede servir para añadir un único registro:

      INSERT NombreTabla
      (Campo1, Campo2, ..., CampoN)
      VALUES
      (ValorCampo1, ValorCampo2, ..., ValorCampoN)

    o para añadir múltiples registros:

      INSERT NombreTabla
      SELECT Campo1, Campo2, ... CampoN
      FROM NombreTablaExterna

    Esta última sería la consulta que deberás de ejecutar para efectuar una inserción masiva de registros existentes en el libro de Excel, y como utiliza una instrucción SELECT, deberás de seleccionar los campos cuyos valores deseas insertar en una tabla concreta de tu base de SQL Server. Por supuesto, deberás de seleccionar los campos que sean obligatorios, como el campo que forma la clave principal (salvo que sea Autonumérico o Identity), o aquellos que pertenezcan a la clave externa o foránea.

    Pero eso eres tú el único que conoce qué campos forman la clave principal y foránea. Una vez que sepas el nombre de dichos campos, no veo ninguna dificultad para escribir la sintaxis de la consulta INSERT de múltiples registros. ;-)

     


    Enrique Martínez
      [MS MVP - VB]

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

    lunes, 26 de septiembre de 2011 10:16
    Moderador
  • uy enrique ya con eso de servidor vinculado me quede en las nubes, jejeje no se ni siquiera desde donde es que tengo que hacer eso si es en codigo de visual basic o directo desde sqlexpress
    daniel muñoz
    martes, 27 de septiembre de 2011 22:37
  • "daniel muñoz" preguntó:

    > con eso de servidor vinculado me quede en las nubes, jejeje
    > no se ni siquiera desde donde es que tengo que hacer eso si
    > es en codigo de visual basic o directo desde sqlexpress

    El procedimiento almacenado de sistema 'sp_addlinkedserver' se puede ejecutar desde tu aplicación de Visual Basic, mediante el método 'Execute' de un objeto SqlCommand debidamente configurado con la instancia, local o con nombre, de Microsoft SQL Server Express. Pero si desconoces los parámetros que tienes que indicarle al procedimiento, mejor será que lo crearas directamente desde la instancia de SQLExpress.

    Por eso te indiqué que recurrieras al foro de SQL Server o a la ayuda de los Libros en Pantalla de SQL Server.


    Enrique Martínez
      [MS MVP - VB]

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

    miércoles, 28 de septiembre de 2011 6:09
    Moderador