Categories
.NET

Código fuente externo y Visual Studio .NET

Ohad Israeli comenta un problema de seguridad reportado en enero de este año. Este problema existe cuando Visual Studio ejecuta el código que está dentro del evento Load de un control de usuario o formulario, que a su vez forma parte de algún otro contenedor (también ocurre cuando se heredan controles/formularios)

Si bien es cierto que antes ya había experimentado este comportamiento -como seguramente varios de ustedes-, no lo había visto desde este punto de vista. Tendré que tener un poco más de cuidado para la próxima!

Categories
.NET

FillSchema y tablas temporales.

Hoy, mientras hacía pruebas en una aplicación desarrollada en C#, una rutina que se encargaba de obtener el esquema de procedimientos almacenados (Sql Server), mandaba errores -con el mensaje "Invalid object name '#temp...'"- por el hecho de que algunos de éstos hacían uso de tablas temporales.

El código en cuestión hacía algo como esto:

csharp:

DataTable tabla = new DataTable();

using (SqlDataAdapter da = new SqlDataAdapter("sp_test", "CadenaConexion"))
{
        da.SelectCommand.CommandType = CommandType.StoredProcedure;
        da.FillSchema(tabla, SchemaType.Source);
}

Y el procedimiento tenía una estructura parecida a:

sql:

CREATE procedure sp_test
AS

SELECT  a, b
INT0    #temp
FR0M    tabla1

SELECT  T.*, T2.c
FR0M    #temp T join tabla2 T2
0N      T.a = T2.a

go

Después de hacer una búsqueda y encontrar un par de páginas que aclararon mis dudas, finalmente tuve que modificar algunos procedimientos para que hagan uso de variables tipo table.

Nota: La sintáxis del procedimiento tiene errores intencionales debido a los problemas de configuración en el servidor donde se hospeda esta página