Saltar al contenido principal

 none
Conexión base de datos desde un sitio Web en vb.net 2017 y sql server 2017 RRS feed

  • Pregunta

  • Saludos.

    Tengo la siguiente rutina que tiene por objeto establecer conexión desde vb.net 2017 con sql server 2015.

    Inicialmente en un pc, me funciona bien tanto en tiempo de diseño como de ejecución en Windows 10.

    Instalé en otro pc y me funciona bien en tiempo de diseño y en ejecución me genera el siguiente error en cnn_Cli.Open() Referencia a objeto no establecida como instancia de un objeto. A pesar que al revisar tengo las mismas líneas de código.

    ¿Que debo tener en cuenta para solucionar este problema?

    De ante mano, gracias por la atención dedicada.

    Código:


     Private Function ComprobarPassword_usua(ByVal nombre2 As String, ByVal clave2 As String) As Boolean
    Dim validaRetorno As Boolean = False
            
            Dim cmd As SqlCommand = Nothing

            Dim SqlConec As SqlConnection = Nothing

    cnn_Cli = New SqlConnection() With {
                    .ConnectionString = CadenaConec(NomBase).ConnectionString.ToString
            }

            If Not cnn_Cli.State = ConnectionState.Open Then
            cnn_Cli.Open()
            End If

    ...




     End Function


            Public Function CadenaConec(ByVal Nom_Base As String) As SqlConnection
                Dim SqlConec As SqlConnection = Nothing
                Try
                    Dim Nom_Conection As String = Conexiones(Nom_Base)
                    Nom_Conection_2 = Conexiones(Nom_Base)
                    SqlConec = New SqlConnection(ConfigurationManager.ConnectionStrings(Nom_Conection_2).ConnectionString)
                Catch ex As Exception
                    MensajeConec = ex.Message
                End Try
                Return SqlConec
            End Function

    lunes, 18 de noviembre de 2019 3:19

Respuestas

  • Cuando comenté lo de las dos aplicaciones rodando en el mismo puerto, estaba pensando en rodarlas desde Visual Studio usando el servidor interno. Si están desplegadas en otra máquina sobre IIS, creo que no puede pasar porque IIS no te deja. No obstante, siempre podrías acudir al IIS Manager y revisar los Bindings de cada aplicación.

    Lo del caché es una carpeta llamada "Temporary ASP.NET files" que está en una ruta parecida a la siguiente (donde la versión cambiará):

    C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files

    Puedes borrar lo que haya dentro, se reconstruye automáticamente cuando ejecutas cada aplicación ASP.NET.

    Pero no creo que en tu caso el problema esté ahí. Si pudieras, sería una buena idea conectar el debugger a la máquina que falla y ejecutar paso a paso a ver cómo se llega a la situación en la que falla. Aunque no tengas Visual Studio instalado en esa máquina, es posible depurar de forma remota:

    https://docs.microsoft.com/en-us/visualstudio/debugger/remote-debugging-aspnet-on-a-remote-iis-7-5-computer?view=vs-2019

    Saludos.

    Me funcionó, estableciendo unos permisos a la base de datos.

    Me sigue quedando la inquietud, para instalar en una computadora del cliente, es necesario instalar solo el sql server y el management studio? y como proteger el código fuente en sql server, puesto que manejo procedimientos almacenados?.

    Muchas gracias por su atención.

    • Marcado como respuesta Campeon_01 viernes, 22 de noviembre de 2019 4:04
    viernes, 22 de noviembre de 2019 4:04

Todas las respuestas

  • Cuando dices que "al revisar tengo las mismas líneas de código", ¿incluye eso también el fichero web.config?

    Lo digo porque la razón más típica de que te salga ese error (teniendo en cuenta que no has señalado en qué línea ocurre) es que el ConfigurationManager no encuentre la cadena de conexión que le pides. Entonces devuelve null y al intentar usar la cadena de conexión sale el error de "referencia no establecida".

    Si la subrutina en cuestión está en una DLL, en tiempo de diseño funciona porque saca la cadena del .config de la dll. Pero en tiempo de ejecución se saca del web.config, y si no está ahí se produce un error.

    lunes, 18 de noviembre de 2019 9:52
  • Cuando dices que "al revisar tengo las mismas líneas de código", ¿incluye eso también el fichero web.config?

    Lo digo porque la razón más típica de que te salga ese error (teniendo en cuenta que no has señalado en qué línea ocurre) es que el ConfigurationManager no encuentre la cadena de conexión que le pides. Entonces devuelve null y al intentar usar la cadena de conexión sale el error de "referencia no establecida".

    Si la subrutina en cuestión está en una DLL, en tiempo de diseño funciona porque saca la cadena del .config de la dll. Pero en tiempo de ejecución se saca del web.config, y si no está ahí se produce un error.


    --Web.config que no funciona en equipo 2 en tiempo de ejecución pero si funciona en tiempo de diseño.
    Nueva instancia de MSQLSERVER_2, puesto que una primera instalación no me fue funcional.

    <?xml version="1.0" encoding="utf-8"?>

    <configuration>
      <connectionStrings>
      
        <remove name="LocalSqlServer" />
        <add name="US01" connectionString="Data Source=Equipo\MSQLSERVER_2;Initial Catalog= BaseDato1; Integrated Security=True; User Id=Equipo\Usuario; Password=xxxx" providerName="System.Data.SqlClient" />
        <add name="JE01" connectionString="Data Source=Equipo\MSQLSERVER_2;Initial Catalog= BaseDato2; Integrated Security=True; User Id=Equipo\Usuario; Password=xxxx" providerName="System.Data.SqlClient" />
      </connectionStrings>
      <system.web>
        <compilation strict="false" explicit="true" targetFramework="4.0" />
        <pages>
          <controls>
            <add tagPrefix="ajaxToolkit" assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" />
          </controls>
        </pages>
      </system.web>
    </configuration>




    --Web.config que funciona en equipo 1 en tiempo de diseño y en tiempo de ejecución.

    <configuration>
    <connectionStrings>
    <remove name="LocalSqlServer" />
    <add name="US01" connectionString="Data Source=Equipo1;Initial Catalog=BaseDato1;Integrated Security=True;User ID=Equipo1\Usuario;Password=xxxx" providerName="System.Data.SqlClient" />
    <add name="JE01" connectionString="Data Source=Equipo1;Initial Catalog=BaseDato2;Integrated Security=True;User ID=Equipo1\Usuario;Password=xxxx" providerName="System.Data.SqlClient" />
    </connectionStrings>
    <system.web>
        <compilation debug="true" strict="false" explicit="true" targetFramework="4.0">
       
    <assemblies>
    <add assembly="System.Data.Services.Client, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
        </assemblies>
        </compilation>
    <pages>
          <controls>
            <add tagPrefix="ajaxToolkit" assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" />
          </controls>
        </pages></system.web>
      <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="Microsoft.Data.OData" publicKeyToken="31bf3856ad364e35" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-5.8.4.0" newVersion="5.8.4.0" />
          </dependentAssembly>
        </assemblyBinding>
      </runtime>
    </configuration>
    martes, 19 de noviembre de 2019 2:37
  • Cuando dices que "al revisar tengo las mismas líneas de código", ¿incluye eso también el fichero web.config?

    Lo digo porque la razón más típica de que te salga ese error (teniendo en cuenta que no has señalado en qué línea ocurre) es que el ConfigurationManager no encuentre la cadena de conexión que le pides. Entonces devuelve null y al intentar usar la cadena de conexión sale el error de "referencia no establecida".

    Si la subrutina en cuestión está en una DLL, en tiempo de diseño funciona porque saca la cadena del .config de la dll. Pero en tiempo de ejecución se saca del web.config, y si no está ahí se produce un error.


    --Web.config que no funciona en equipo 2 en tiempo de ejecución pero si funciona en tiempo de diseño.
    Nueva instancia de MSQLSERVER_2, puesto que una primera instalación no me fue funcional.

    <?xml version="1.0" encoding="utf-8"?>

    <configuration>
      <connectionStrings>
      
        <remove name="LocalSqlServer" />
        <add name="US01" connectionString="Data Source=Equipo\MSQLSERVER_2;Initial Catalog= BaseDato1; Integrated Security=True; User Id=Equipo\Usuario; Password=xxxx" providerName="System.Data.SqlClient" />
        <add name="JE01" connectionString="Data Source=Equipo\MSQLSERVER_2;Initial Catalog= BaseDato2; Integrated Security=True; User Id=Equipo\Usuario; Password=xxxx" providerName="System.Data.SqlClient" />
      </connectionStrings>
      <system.web>
        <compilation strict="false" explicit="true" targetFramework="4.0" />
        <pages>
          <controls>
            <add tagPrefix="ajaxToolkit" assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" />
          </controls>
        </pages>
      </system.web>
    </configuration>




    --Web.config que funciona en equipo 1 en tiempo de diseño y en tiempo de ejecución.

    <configuration>
    <connectionStrings>
    <remove name="LocalSqlServer" />
    <add name="US01" connectionString="Data Source=Equipo1;Initial Catalog=BaseDato1;Integrated Security=True;User ID=Equipo1\Usuario;Password=xxxx" providerName="System.Data.SqlClient" />
    <add name="JE01" connectionString="Data Source=Equipo1;Initial Catalog=BaseDato2;Integrated Security=True;User ID=Equipo1\Usuario;Password=xxxx" providerName="System.Data.SqlClient" />
    </connectionStrings>
    <system.web>
        <compilation debug="true" strict="false" explicit="true" targetFramework="4.0">
       
    <assemblies>
    <add assembly="System.Data.Services.Client, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
        </assemblies>
        </compilation>
    <pages>
          <controls>
            <add tagPrefix="ajaxToolkit" assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" />
          </controls>
        </pages></system.web>
      <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="Microsoft.Data.OData" publicKeyToken="31bf3856ad364e35" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-5.8.4.0" newVersion="5.8.4.0" />
          </dependentAssembly>
        </assemblyBinding>
      </runtime>
    </configuration>

    Nota: En una primera instalación, el conectar a la base de datos, me generaba el siguiente error:

    A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server) (.Net SqlClient Data Provider).

    De ahí, el crear una nueva instancia y me funcionó bien en tiempo de diseño, más no en ejecución.

    martes, 19 de noviembre de 2019 2:44
  • Es dificil de depurar solo con ver una pequeña porción del código fuente. Lo ideal sería que lo ejecutases paso a paso con el debugger examinando las variables a ver qué es lo que realmente sucede.

    El problema está en que según el código llamas a .ConnectionStrings(Nom_Conection_2) pero, claro, no hay forma de saber desde aquí cuál es el valor de Nom_Conection_2 en tiempo de ejecución. Si ese valor no fuese ni "US01" ni "JE01", que son las dos conexiones que tienes en el .config, entonces se produciría un error de "referencia no establecida".

    Observa que el hecho de que funcione en tiempo de diseño no guarda ninguna relación con lo anterior. Obviamente, en tiempo de diseño la variable Nom_Conection_2 no tiene ningún valor y tampoco se está ejecutando la línea de código que la usa.

    martes, 19 de noviembre de 2019 12:07
  • Es dificil de depurar solo con ver una pequeña porción del código fuente. Lo ideal sería que lo ejecutases paso a paso con el debugger examinando las variables a ver qué es lo que realmente sucede.

    El problema está en que según el código llamas a .ConnectionStrings(Nom_Conection_2) pero, claro, no hay forma de saber desde aquí cuál es el valor de Nom_Conection_2 en tiempo de ejecución. Si ese valor no fuese ni "US01" ni "JE01", que son las dos conexiones que tienes en el .config, entonces se produciría un error de "referencia no establecida".

    Observa que el hecho de que funcione en tiempo de diseño no guarda ninguna relación con lo anterior. Obviamente, en tiempo de diseño la variable Nom_Conection_2 no tiene ningún valor y tampoco se está ejecutando la línea de código que la usa.

    Nom_Conection_2: es US01 o JE01.  En tiempo de ejecución lo puedo visualizar mediante variables.

    Esta instrucción me devuelve la cadena de conexión que se encuentra en el web.config:

     SqlConec = New SqlConnection(ConfigurationManager.ConnectionStrings(Nom_Conection_2).ConnectionString)

    El error lo marca en: cnn_Cli.Open()


    martes, 19 de noviembre de 2019 19:52
  • El error lo marca en: cnn_Cli.Open()

    La única razón por la que cnn_Cli.Open() puede arrojar el error de "Referencia a objeto no establecida como instancia de un objeto" es que cnn_Cli sea Nothing. PERO: si el código que has mostrado es el que realmente se está ejecutando, eso es imposible porque precisamente antes le haces un "New".

    Así que el conjunto de información que has proporcionado en el foro es incompatible. O bien no es ese el código exacto que se está ejecutando realmente, o bien el error no sale en esa línea, o bien el error es otro error distinto. Pero todo a la vez no puede ocurrir. Alguna de las tres cosas no es exactamente como la has contado. No digo que sea culpa tuya; a veces he visto cosas raras en aplicaciones .NET, como por ejemplo que aparentemente se estaba ejecutando un determinado código, pero los resultados que salían eran imposibles con ese código, y al final resultó que se estaba ejecutando una versión anterior que estaba en caché. También he visto casos en que estaba mal configurado el servidor web y había dos aplicaciones en el mismo puerto y al depurar se estaba ejecutando la otra y no la que pensábamos. No digo que te esté pasando precisamente esto, pero sería un ejemplo de un caso en el que si eso ocurriese incurriríamos en la primera de las tres cosas que te he dicho que son incompatibles: no sería ese el código que se está ejecutando.

    martes, 19 de noviembre de 2019 20:31
  • El error lo marca en: cnn_Cli.Open()

    La única razón por la que cnn_Cli.Open() puede arrojar el error de "Referencia a objeto no establecida como instancia de un objeto" es que cnn_Cli sea Nothing. PERO: si el código que has mostrado es el que realmente se está ejecutando, eso es imposible porque precisamente antes le haces un "New".

    Así que el conjunto de información que has proporcionado en el foro es incompatible. O bien no es ese el código exacto que se está ejecutando realmente, o bien el error no sale en esa línea, o bien el error es otro error distinto. Pero todo a la vez no puede ocurrir. Alguna de las tres cosas no es exactamente como la has contado. No digo que sea culpa tuya; a veces he visto cosas raras en aplicaciones .NET, como por ejemplo que aparentemente se estaba ejecutando un determinado código, pero los resultados que salían eran imposibles con ese código, y al final resultó que se estaba ejecutando una versión anterior que estaba en caché. También he visto casos en que estaba mal configurado el servidor web y había dos aplicaciones en el mismo puerto y al depurar se estaba ejecutando la otra y no la que pensábamos. No digo que te esté pasando precisamente esto, pero sería un ejemplo de un caso en el que si eso ocurriese incurriríamos en la primera de las tres cosas que te he dicho que son incompatibles: no sería ese el código que se está ejecutando.

    Al realizar clic en iniciar da como resultado lo que se visualiza en líneas en mención (Referencia a objeto no establecida como instancia )

    Usuario
    <input id="mainContent_TextNombrUsua" name="ctl00$mainContent$TextNombrUsua" type="text" value="A0001GSEJ000001" />
    Password
    <input id="mainContent_TextPassw" name="ctl00$mainContent$TextPassw" type="text" value="12345678" />
    <input id="mainContent_ButIniciar" name="ctl00$mainContent$ButIniciar" type="submit" value="Iniciar" />
    Paso 1. ComprobarPassword_usua. Ante antes de open: Referencia a objeto no establecida como instancia de un objeto. ValidateUser: Usuario no registrado
    Paso 1. ComprobarPassword_usua. Ante antes de open: Referencia a objeto no establecida como instancia de un objeto. ValidateUser: MensajeConec: Valida en login

    La variable MensajeConec  almacena un valor temporal y poder ver la información tratando de interpretar el error.

    La función: CadenaConec

    Error en cnn_Cli.Open()

            Private Function ComprobarPassword_usua(ByVal nombre2 As String, ByVal clave2 As String) As Boolean
                Dim validaRetorno As Boolean = False
                Dim var_txtUsuario As String = Trim(nombre2)

                Dim t As Integer = 0
                Dim blnResult As Boolean = False

                Dim cmd As SqlCommand = Nothing


                Try
                    cnn_Cli = New SqlConnection() With {
                    .ConnectionString = CadenaConec(NomBase).ConnectionString
                    }
                    If Not cnn_Cli.State = ConnectionState.Open Then
                        MensajeConec = MensajeConec & "  Paso 1. ComprobarPassword_usua.  Ante antes de open:  "
                        cnn_Cli.Open()
                    End If
                    MensajeConec = MensajeConec & "  Paso 1.1. ComprobarPassword_usua.  Despues cli_State:  "

                   ...

    Nom_Conection_2: retorna "US01" o "JE01" dependiendo del rutina que realiza el llamado.

            Public Function CadenaConec(ByVal Nom_Base As String) As SqlConnection
                'Label2.Text = var_txtUsuario
                Dim SqlConec As SqlConnection = Nothing

                Try
                    Dim Nom_Conection As String = Conexiones(Nom_Base)
                    Nom_Conection_2 = Conexiones(Nom_Base)
                    SqlConec = New SqlConnection(ConfigurationManager.ConnectionStrings(Nom_Conection_2).ConnectionString)
                Catch ex As Exception
                    MensajeConec = MensajeConec & " " & ex.Message & "[ " & SqlConec.ConnectionString.ToString & " CadenaConec ] " & Nom_Base & " varia " & Nom_Conection_2
                End Try
                Return SqlConec
            End Function

    martes, 19 de noviembre de 2019 21:50
  • El error lo marca en: cnn_Cli.Open()

    La única razón por la que cnn_Cli.Open() puede arrojar el error de "Referencia a objeto no establecida como instancia de un objeto" es que cnn_Cli sea Nothing. PERO: si el código que has mostrado es el que realmente se está ejecutando, eso es imposible porque precisamente antes le haces un "New".

    Así que el conjunto de información que has proporcionado en el foro es incompatible. O bien no es ese el código exacto que se está ejecutando realmente, o bien el error no sale en esa línea, o bien el error es otro error distinto. Pero todo a la vez no puede ocurrir. Alguna de las tres cosas no es exactamente como la has contado. No digo que sea culpa tuya; a veces he visto cosas raras en aplicaciones .NET, como por ejemplo que aparentemente se estaba ejecutando un determinado código, pero los resultados que salían eran imposibles con ese código, y al final resultó que se estaba ejecutando una versión anterior que estaba en caché. También he visto casos en que estaba mal configurado el servidor web y había dos aplicaciones en el mismo puerto y al depurar se estaba ejecutando la otra y no la que pensábamos. No digo que te esté pasando precisamente esto, pero sería un ejemplo de un caso en el que si eso ocurriese incurriríamos en la primera de las tres cosas que te he dicho que son incompatibles: no sería ese el código que se está ejecutando.

    Al realizar clic en iniciar da como resultado lo que se visualiza en líneas en mención (Referencia a objeto no establecida como instancia )

    Usuario
    <input id="mainContent_TextNombrUsua" name="ctl00$mainContent$TextNombrUsua" type="text" value="A0001GSEJ000001" />
    Password
    <input id="mainContent_TextPassw" name="ctl00$mainContent$TextPassw" type="text" value="12345678" />
    <input id="mainContent_ButIniciar" name="ctl00$mainContent$ButIniciar" type="submit" value="Iniciar" />
    Paso 1. ComprobarPassword_usua. Ante antes de open: Referencia a objeto no establecida como instancia de un objeto. ValidateUser: Usuario no registrado
    Paso 1. ComprobarPassword_usua. Ante antes de open: Referencia a objeto no establecida como instancia de un objeto. ValidateUser: MensajeConec: Valida en login

    La variable MensajeConec  almacena un valor temporal y poder ver la información tratando de interpretar el error.

    La función: CadenaConec

    Error en cnn_Cli.Open()

            Private Function ComprobarPassword_usua(ByVal nombre2 As String, ByVal clave2 As String) As Boolean
                Dim validaRetorno As Boolean = False
                Dim var_txtUsuario As String = Trim(nombre2)

                Dim t As Integer = 0
                Dim blnResult As Boolean = False

                Dim cmd As SqlCommand = Nothing


                Try
                    cnn_Cli = New SqlConnection() With {
                    .ConnectionString = CadenaConec(NomBase).ConnectionString
                    }
                    If Not cnn_Cli.State = ConnectionState.Open Then
                        MensajeConec = MensajeConec & "  Paso 1. ComprobarPassword_usua.  Ante antes de open:  "
                        cnn_Cli.Open()
                    End If
                    MensajeConec = MensajeConec & "  Paso 1.1. ComprobarPassword_usua.  Despues cli_State:  "

                   ...

    Nom_Conection_2: retorna "US01" o "JE01" dependiendo del rutina que realiza el llamado.

            Public Function CadenaConec(ByVal Nom_Base As String) As SqlConnection
                'Label2.Text = var_txtUsuario
                Dim SqlConec As SqlConnection = Nothing

                Try
                    Dim Nom_Conection As String = Conexiones(Nom_Base)
                    Nom_Conection_2 = Conexiones(Nom_Base)
                    SqlConec = New SqlConnection(ConfigurationManager.ConnectionStrings(Nom_Conection_2).ConnectionString)
                Catch ex As Exception
                    MensajeConec = MensajeConec & " " & ex.Message & "[ " & SqlConec.ConnectionString.ToString & " CadenaConec ] " & Nom_Base & " varia " & Nom_Conection_2
                End Try
                Return SqlConec
            End Function

    Este es el código. Me confundo, puesto que en otro pc que tengo, me funciona bien tanto en diseño como en ejecución. El motivo de instalarlo en otra máquina se debió a pantalla pequeña en lo referente al la letra pequeña  y que necesitaba instalarlo en la máquina del cliente, pero protegiendo el código fuente.

    Una pregunta: como puedo visualizar si existen dos aplicaciones utilizando el mismo puerto, o limpiar el cache que tu mencionas?

    miércoles, 20 de noviembre de 2019 1:31
  • Cuando comenté lo de las dos aplicaciones rodando en el mismo puerto, estaba pensando en rodarlas desde Visual Studio usando el servidor interno. Si están desplegadas en otra máquina sobre IIS, creo que no puede pasar porque IIS no te deja. No obstante, siempre podrías acudir al IIS Manager y revisar los Bindings de cada aplicación.

    Lo del caché es una carpeta llamada "Temporary ASP.NET files" que está en una ruta parecida a la siguiente (donde la versión cambiará):

    C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files

    Puedes borrar lo que haya dentro, se reconstruye automáticamente cuando ejecutas cada aplicación ASP.NET.

    Pero no creo que en tu caso el problema esté ahí. Si pudieras, sería una buena idea conectar el debugger a la máquina que falla y ejecutar paso a paso a ver cómo se llega a la situación en la que falla. Aunque no tengas Visual Studio instalado en esa máquina, es posible depurar de forma remota:

    https://docs.microsoft.com/en-us/visualstudio/debugger/remote-debugging-aspnet-on-a-remote-iis-7-5-computer?view=vs-2019

    miércoles, 20 de noviembre de 2019 11:48
  • Cuando comenté lo de las dos aplicaciones rodando en el mismo puerto, estaba pensando en rodarlas desde Visual Studio usando el servidor interno. Si están desplegadas en otra máquina sobre IIS, creo que no puede pasar porque IIS no te deja. No obstante, siempre podrías acudir al IIS Manager y revisar los Bindings de cada aplicación.

    Lo del caché es una carpeta llamada "Temporary ASP.NET files" que está en una ruta parecida a la siguiente (donde la versión cambiará):

    C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files

    Puedes borrar lo que haya dentro, se reconstruye automáticamente cuando ejecutas cada aplicación ASP.NET.

    Pero no creo que en tu caso el problema esté ahí. Si pudieras, sería una buena idea conectar el debugger a la máquina que falla y ejecutar paso a paso a ver cómo se llega a la situación en la que falla. Aunque no tengas Visual Studio instalado en esa máquina, es posible depurar de forma remota:

    https://docs.microsoft.com/en-us/visualstudio/debugger/remote-debugging-aspnet-on-a-remote-iis-7-5-computer?view=vs-2019

    Saludos.

    Me funcionó, estableciendo unos permisos a la base de datos.

    Me sigue quedando la inquietud, para instalar en una computadora del cliente, es necesario instalar solo el sql server y el management studio? y como proteger el código fuente en sql server, puesto que manejo procedimientos almacenados?.

    Muchas gracias por su atención.

    • Marcado como respuesta Campeon_01 viernes, 22 de noviembre de 2019 4:04
    viernes, 22 de noviembre de 2019 4:04
  • para instalar en una computadora del cliente, es necesario instalar solo el sql server y el management studio?

    Solo el SQL Server. El Management Studio no es necesario instalarlo en el equipo de destino. Si alguna vez tienes que administrar ese SQL Server, puedes hacerlo desde línea de comandos o desde PowerShell sin usar Management Studio, o si necesitas algo más interactivo se puede conectar desde un equipo remoto que tenga el Management Studio.

    y como proteger el código fuente en sql server, puesto que manejo procedimientos almacenados?.

    Existe una opción para encriptar los procedimientos almacenados. Al crearlos se pone CREATE PROCEDURE... WITH ENCRYPTION y entonces ya no es posible ver el código fuente.

    Ten presente, sin embargo, que no es una encriptación muy robusta, y alguien que sepa lo que está haciendo podría llegar a desencriptarlos.

    viernes, 22 de noviembre de 2019 7:00
  • para instalar en una computadora del cliente, es necesario instalar solo el sql server y el management studio?

    Solo el SQL Server. El Management Studio no es necesario instalarlo en el equipo de destino. Si alguna vez tienes que administrar ese SQL Server, puedes hacerlo desde línea de comandos o desde PowerShell sin usar Management Studio, o si necesitas algo más interactivo se puede conectar desde un equipo remoto que tenga el Management Studio.

    y como proteger el código fuente en sql server, puesto que manejo procedimientos almacenados?.

    Existe una opción para encriptar los procedimientos almacenados. Al crearlos se pone CREATE PROCEDURE... WITH ENCRYPTION y entonces ya no es posible ver el código fuente.

    Ten presente, sin embargo, que no es una encriptación muy robusta, y alguien que sepa lo que está haciendo podría llegar a desencriptarlos.

    Cuál es la mejor alternativa: todo código en visual estudio  y descartar procedimiento almacenado, cuando se trata de proteger el código fuente?

    viernes, 22 de noviembre de 2019 14:01
  • Cuál es la mejor alternativa: todo código en visual estudio  y descartar procedimiento almacenado, cuando se trata de proteger el código fuente?

    No. En Visual Studio es facílísimo ver el código. Se puede desensamblar sin ninguna dificultad, y el código SQL se vería en claro. In cluso hay programas que te reconstruyen completo el código fuente del programa a partir del código compilado en Visual Studio. Existen herramientas llamadas "ofuscadores" que sirven para enrevesar el código y que sea más difícil desensamblarlo, pero no solo otorgan una protección superficial, el código se puede llegar a reconstruir con el suficiente esfuerzo. Y desde luego, el código SQL se podría ver aunque no esté en un procedimiento almacenado. También se podría ver con un capturador de red, interceptando el tráfico entre tu programa y el servidor SQL. Y también se podria ver con el Profiler de SQL Server, que te captura todas las instrucciones enviadas al servidor. En resumidas cuentas, creo que es preferible el WITH ENCRYPTION en el procedimiento almacenado, incluso aunque su cifrado no sea muy robusto.
    viernes, 22 de noviembre de 2019 14:16