Thursday, December 24, 2009

ASP .NET evento Selected del sqlDataSource

Para determinar si un sqlDataSource tiene o no datos (para efectos de validaciones por ejemplo), basta con usar su método OnSelected, tal y como se describe a continuacion:

Protected Sub SqlDataSource1_Selected(ByVal sender As Object, ByVal e As SqlDataSourceStatusEventArgs)
Dim Rows As Integer = e.AffectedRows
End Sub

La variable Rows contendrá el número de registros regresados por el sqlDatasource, entonces, si por ejemplo se requiere mostrar un boton en base a si la consulta regresó o no registros, procedemos a lo siguiente:

Protected Sub OperacionesDia_Selected(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceStatusEventArgs) Handles OperacionesDia.Selected
Dim totalRows As Integer = e.AffectedRows

If totalRows = 0 Then
Button1.Visible = False
Else
Button1.Visible = True
End If
End Sub

Saturday, December 12, 2009

Problema Visual Studio 2005 debugger y IE8

Acabo de encontrarme con este problema, y esque cuando inicio mi WebApp en Visual Studio 2005 me abre la ventana del Explorador pero el debugger no inicia, por lo que puedo correr la App varias veces (F5), y ya que el debugger falla en iniciar, no puedo correrla paso a paso.

Lo que encontré fue que al Instalar el IE, éste cuenta con la característica llamada Losely-Coupled Internet Explorer (LCIE), lo que ocasiona que IE corra en varios procesos, no permitiendo que el debugger pueda pegarse al procesos de nuestra WebApp correcto, y podémos encontras mas info en el siguiente link

La solución es desactivar el LCIE, de la sig. manera:

1. Abrir RegEdit
2. Ir a HKEY_LOCALMACHINE > SOFTWARE > Microsoft > Internet Explorer > Main
3. Agregar un parametro de tipo DWORD llamado TabProcGrowth
4. Establecer el valor de este parametro en 0

Si estas corriendo en WinVista o posterior tambien deberas desactivar el modo protegido

Friday, November 27, 2009

Agregar ID autonumerico en consulta SQL

Tal y como lo describen el siguiente link

La manera mas sencilla de autonumerar los registros arrojados por una consulta SQL,
sería la siguiente:

select rank() OVER (ORDER BY a.au_lname, a.au_fname) as rank,
a.au_lname, a.au_fname
from authors a
order by rank

De igual manera se puede asignar un autoumerico a una tabla haciendo agrupaciones por uno o mas campos:

select row_number() over (partition by a.BakeLineId order by a.BakeLineId) as rank ,a.*
from tblBakeComment_Impt a
order by BakeLineId

Wednesday, November 4, 2009

ASP .NET Guardar variables en ViewState

Para guardar una variable en ViewState y poder recuperar su valor entre Postbacks seguir los siguientes pasos:

Dim vNombre As String

//Para guardarla antes del Postback:
ViewState("vNombre") = txtNombre.text;

//ParaRrecuperarla:
ViewState("vNombre") = txtNombre.text;

Recuerda que usar el ViewState es bueno en casos donde la información a almacenar es poca, ya que el valor de la cadena ViewState viaja de Cliente a Server y viceversa, cada vez que se realizan los Posts a Servidor, por lo que almacenar en Viewstate, un Dataset muy pesado por ejemplo, nos traería serios problemas de performance

Tambien hay que tomar en cuenta que si el usuario regresa en el Browser (back) el valor de la variable regresa a su valor anterior, por lo que, si queremos guardar el valor durante toda la sesión utilizamos lo siguiente:

//Para guardarla antes del Postback:
Session("vNombre") = txtNombre.text;

//ParaRrecuperarla:
Session("vNombre") = txtNombre.text;

De esta manera el valor de la variable siempre será el mismo, sin importar si el usuario regreso a una página anterior =D

Tuesday, November 3, 2009

Abrir Nueva Ventana dentro de Ajax UpdatePanel

Al intentar abrir una nueva ventana dentro de un Ajax UpdatePanel
marca un error de Parsing, es decir, si queremos abrir una nueva ventana
de la siguiente manera:

Response.Write("<script language="javascript"> window.open('http://pagina.pdf'); </script>")

Nos marcaría un error, ya que este tipo de llamada es ignorada por el UpdatePanel.
Esto lo podemos resolver, llamando la nueva ventana de la sig forma:

ScriptManager.RegisterClientScriptBlock(Me.UpdatePanel1, Me.UpdatePanel1.GetType(), "AnyScriptNameYouLike", "window.open('http://pagina.pdf');", True)

Saturday, July 18, 2009

Instalar Sql Server 2005 en Windows 7

El otro día instalé SQLServer 2005(x64) en mi máquina, pero me marcaba un Warning en el test de configuración, en la parte de IIS, por lo que navegando en internet encontré que se deben activar las siguientes opciones de Windows (Control Panel -> Program and Features -> Turn Windows Features on or off) Todas las opciones estan dentro la categoría de Internet Information Services.

Static Content (WWW Services) Common HTTP Features
Default Document (WWW Services) Common HTTP Features
HTTP Redirection (WWW Services) Common HTTP Features
Directory Browsing (WWW Services) Common HTTP Features
ASP.Net (WWW Services) Application Development Features
ISAPI Extension (WWW Services) Application Development Features
ISAPI Filters (WWW Services) Application Development Features
Windows Authentication (WWW Services) Security
IIS Metabase and... ISS 6 Management Compatibility
IIS 6 WMI Compatibility ISS 6 Management Compatibility

Seleccionar fila n de una tabla de SQL Server

En este post les mostraré varias alternativas con las que podrémos consultar una columna "n" de una tabla, por ejemplo, consultar la columna 5 en una tabla.
Hay que tomar en cuenta que, en caso de traernos una fila de una tabla muy pesada, por decir, la fila 5,124,244 puede traernos serios problemas de desempeño. Así que considera utilizar planes de ejecución para probar los métodos en Resultsets muy pesados y ver cuál te funciona mejor.

El primer paso es crear la tabla de ejemplo:

CREATE TABLE Names
(
NameID INT IDENTITY(1, 1)
PRIMARY KEY CLUSTERED,
FName VARCHAR(32)
)
GO

SET NOCOUNT ON
INSERT Names(FName) VALUES('Aaron')
INSERT Names(FName) VALUES('Greg')
INSERT Names(FName) VALUES('Alex')
INSERT Names(FName) VALUES('Luan')
INSERT Names(FName) VALUES('John')
INSERT Names(FName) VALUES('Todd')
INSERT Names(FName) VALUES('Scott')
INSERT Names(FName) VALUES('Jess')
INSERT Names(FName) VALUES('Drew')
INSERT Names(FName) VALUES('Katherine')
INSERT Names(FName) VALUES('Paul')
GO

Alternativa 1: TOP anidados

SELECT TOP 1 FName
FROM
(
SELECT TOP 10 FName
FROM Names
ORDER BY FName
) sub
ORDER BY FName DESC

Alternativa 2: NOT IN
 
SELECT TOP 1 FName
FROM Names WHERE FName NOT IN
(
SELECT TOP 9 FName
FROM Names
ORDER BY FName
)
ORDER BY FName

Alternativa 3: "count derivado" se asume que FName is único

SELECT FName
FROM Names
WHERE
(
SELECT COUNT(*)
FROM Names n2
WHERE n2.FName <= Names.FName ) = 10

Alternativa 4: MAX

SELECT FName = MAX(FName) FROM
(
SELECT TOP 10 FName
FROM Names
ORDER BY FName
) sub

Alternativa 5: Uso de cursores

DECLARE FNames CURSOR
LOCAL STATIC READ_ONLY FOR
SELECT FName
FROM Names
ORDER BY FName

DECLARE @FName VARCHAR(32)

OPEN FNames

FETCH RELATIVE 10 FROM FNames INTO @FName

CLOSE FNames
DEALLOCATE FNames

SELECT FName = @FName

DROP TABLE Names
GO

Referencia

Monday, July 13, 2009

SQL - Borrar registros con Inner Join

El siguiente código es para borrar registros en una tabla "X" realizando un inner join con otra tabla "Y".


DELETE t1
FROM table1 t1
INNER JOIN table2 t2 ON t1.<columna>=t2.<columna>



No olvidar utilizar control de transacciones (checar post próximamente a publicar)

Bienvenida

Este es el primer post del blog, duh!

Iba a comenzar a postear artículos pero decidí postear esto.

Aqui iré registrando conocimiento acerca de Programación, Bases de Datos y Problemas en general, relacionados con TI que vaya generando a lo largo de mi carrera como Ing. en Sistemas (Software).

Actualmente trabajo en una empresa de Servicios, como desarrollador, utilizando las siguientes herramientas: SQL Server 2000/2005, Visual Studio 2005 y VisionJade (Java).

Hace 5 años que egresé de la Universidad Atónoma de Chihuahua en México y he trabajado con lenguaje que van desde TurboC (en la prepa) a lenguajes mas avanzados como Ruby, sin embargo mi pasión verdadera son las Bases de Datos, he trabajado con Oracle, MySQL, pero siendo SQL Server mi DBMS favorito.

Bueno, una vez hecha la presentación, a postear se ha dicho!