Principales respuestas
Conexión base de datos desde un sitio Web en vb.net 2017 y sql server 2017

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
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:
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
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.
- Propuesto como respuesta Pablo RubioModerator martes, 19 de noviembre de 2019 16:24
-
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> -
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.
-
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.
- Propuesto como respuesta Pablo RubioModerator martes, 19 de noviembre de 2019 16:25
-
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()
-
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.
- Propuesto como respuesta Pablo RubioModerator jueves, 21 de noviembre de 2019 19:04
-
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 loginLa 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 -
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 loginLa 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 FunctionEste 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?
-
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:
- Propuesto como respuesta Pablo RubioModerator jueves, 21 de noviembre de 2019 19:04
-
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:
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
-
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.
-
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?
-
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?