Algunas Expresiones Regulares
Aqui les dejo algunas de las expresiones que comunmente utilizamos para validar y que luego se nos andan olvidando.
Validation para RFC= "^[a-zA-Z]{3,4}(\d{6})((\D|\d){3})?$"
Validation para Email= "^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"
Validation admite sólo números= "^/d*"
Y su uso puede variar, la que yo uso a veces es la siguiente:
Dim expr As New Regex("^\d*")
Dim val As Match = expr.Match(tbxTelefono.Text)
If Not val.Success Then
LabelMensaje.Text = "-El teléfono no es válido
"
End if
Ñau!
jueves, 30 de agosto de 2007
Impresion rapida de variables de Sesion
Espero les sea de utilidad este pequeño procedimiento, lo que hace es imprimir las variables se sesion y sus valores (si es que contiene algun valor).
For i As Integer = 0 To Session.Contents.Count - 1
Response.Write("" & Session.Keys(i))
Response.Write(" = " & Session.Item(i))
Next
El resultado de esto seria por ejemplo:
ID = 1245
Variable = Si
Direccion = Calle_21
Nau!
Espero les sea de utilidad este pequeño procedimiento, lo que hace es imprimir las variables se sesion y sus valores (si es que contiene algun valor).
For i As Integer = 0 To Session.Contents.Count - 1
Response.Write("" & Session.Keys(i))
Response.Write(" = " & Session.Item(i))
Next
El resultado de esto seria por ejemplo:
ID = 1245
Variable = Si
Direccion = Calle_21
Nau!
Etiquetas:
Imprimir todas las variables de Session
Algunas funciones VB.NET útiles para el manejo de BD
Esta función recibe como parámetro una sentencia SQL de tipo INSERT, UPDATE o DELETE y la ejecuta:
Sub RunSQLBD(ByVal StrSQL As String)
Dim dbConnection As New SqlConnection(ConfigurationManager.AppSettings("MyDataBase"))
Dim dbCommand As New SqlCommand(StrSQL, dbConnection)
Try
dbConnection.Open()
dbCommand.ExecuteNonQuery()
Finally
dbConnection.Close()
End Try
End Sub
Recordemos que:
ConfigurationManager.AppSettings("MyDataBase")
Hace referencia a la siguiente línea creada en el web.config:
<appSettings>
<add key="MyDataBase" value="server=SERVER_NAME;database=DATABASE_NAME;UID=sa;PWD=xxxxx;/>
</appSettings>
2. GetDataSetBD
La siguiente función regresa un DataSet a partir de una sentencia SQL de tipo SELECT
Function GetDataSetBD(ByVal StrSQL As String) As DataSet
Dim dbConnection As New SqlConnection(ConfigurationManager.AppSettings("MyDataBase"))
Dim objAdapter As New SqlDataAdapter(StrSQL, dbConnection)
Dim ds As New DataSet()
Try
objAdapter.Fill(ds)
Catch ex As Exception
Throw New Exception(ex.Message, ex.InnerException)
Finally
objAdapter.Dispose()
If dbConnection.State = ConnectionState.Open Then dbConnection.Close()
dbConnection.Dispose()
End Try
Return ds
End Function
La instrucción throw nos permitirá arrojar el error en caso de que lo haya. De ese modo cuando llamemos esta función podremos hacer algo como lo siguiente.
Try
Dim ds As New DataSet
ds = GetDataSetBD("SELECT * FROM Usuarios")
'AQUÍ PROCESAMOS EL DATASET COMO QUERAMOS
Catch ex As Exception
'AQUÍ OBTENEMOS EL ERROR GENERADO Y REALIZAMOS ALGUNA ACCIÓN PERTINENTE
End Try
Esta función recibe como parámetro una sentencia SQL de tipo INSERT, UPDATE o DELETE y la ejecuta:
Sub RunSQLBD(ByVal StrSQL As String)
Dim dbConnection As New SqlConnection(ConfigurationManager.AppSettings("MyDataBase"))
Dim dbCommand As New SqlCommand(StrSQL, dbConnection)
Try
dbConnection.Open()
dbCommand.ExecuteNonQuery()
Finally
dbConnection.Close()
End Try
End Sub
Recordemos que:
ConfigurationManager.AppSettings("MyDataBase")
Hace referencia a la siguiente línea creada en el web.config:
<appSettings>
<add key="MyDataBase" value="server=SERVER_NAME;database=DATABASE_NAME;UID=sa;PWD=xxxxx;/>
</appSettings>
2. GetDataSetBD
La siguiente función regresa un DataSet a partir de una sentencia SQL de tipo SELECT
Function GetDataSetBD(ByVal StrSQL As String) As DataSet
Dim dbConnection As New SqlConnection(ConfigurationManager.AppSettings("MyDataBase"))
Dim objAdapter As New SqlDataAdapter(StrSQL, dbConnection)
Dim ds As New DataSet()
Try
objAdapter.Fill(ds)
Catch ex As Exception
Throw New Exception(ex.Message, ex.InnerException)
Finally
objAdapter.Dispose()
If dbConnection.State = ConnectionState.Open Then dbConnection.Close()
dbConnection.Dispose()
End Try
Return ds
End Function
La instrucción throw nos permitirá arrojar el error en caso de que lo haya. De ese modo cuando llamemos esta función podremos hacer algo como lo siguiente.
Try
Dim ds As New DataSet
ds = GetDataSetBD("SELECT * FROM Usuarios")
'AQUÍ PROCESAMOS EL DATASET COMO QUERAMOS
Catch ex As Exception
'AQUÍ OBTENEMOS EL ERROR GENERADO Y REALIZAMOS ALGUNA ACCIÓN PERTINENTE
End Try
¿Cómo vincular dos BD's en una sentencia SQL?
En términos sencillos, la idea aquí es juntar en una sola sentencia dos tablas que pertenezcan a distintas bases de datos SQL.
Algunas veces requerimos accesar a dos bases de datos para obtener cierta información. Por ejemplo, supongamos que en una BD tenemos los datos personales de todos los clientes y queremos "pegarle" a esta información otro dato existente en otra BD. Este dato podría ser, por ejemplo, cuánto ha consumido de nuestros productos. De ese modo tenemos algo así:
SELECT * FROM BdPrincipal..Clientes
INNER JOIN BdDetalles..Consumos
ON (BdPrincipal..Clientes.IdCliente = BdDetalles..Consumos.IdCliente)
Ambas bases deberán estar funcionando bajo el mismo lenguaje, de otro modo nuestra sentencia será algo como:
SELECT * FROM BdPrincipal..Clientes
INNER JOIN BdDetalles..Consumos
ON (
BdPrincipal..Clientes.IdCliente COLLATE SQL_Latin1_General_CP1253_CS_AS
=
BdDetalles..Consumos.IdCliente COLLATE SQL_Latin1_General_CP1253_CS_AS
)
El idioma lo podemos verificar en la configuración de cada base (SQL Manager)
Un query para paginar a nuestro antojo.
Veamos este primer ejemplo que tomará los primeros 10 registros encontrados en la tabla Clientes:
SELECT TOP 10 * FROM Clientes
WHERE IdCliente NOT IN
(
SELECT TOP 0 IdCliente FROM Clientes
ORDER BY IdCliente
)
ORDER BY IdCliente
Ahora tomando los siguientes 10 registros:
SELECT TOP 10 * FROM Clientes
WHERE IdCliente NOT IN
(
SELECT TOP 10 IdCliente FROM Clientes
ORDER BY IdCliente
)
ORDER BY IdCliente
Ahora tomando el tercer grupo (TOP 20) de 10 registros (TOP 10):
SELECT TOP 10 * FROM Clientes
WHERE IdCliente NOT IN
(
SELECT TOP 20 IdCliente FROM Clientes
ORDER BY IdCliente
)
ORDER BY IdCliente
Obsérvese la aplicación de filtros al ejemplo anterior.
SELECT TOP 10 * FROM Clientes
WHERE IdCliente NOT IN
(
SELECT TOP 20 IdCliente FROM Clientes
WHERE Vigencia > GetDate()
ORDER BY IdCliente
)
AND WHERE Vigencia > GetDate()
ORDER BY IdCliente
Veamos este primer ejemplo que tomará los primeros 10 registros encontrados en la tabla Clientes:
SELECT TOP 10 * FROM Clientes
WHERE IdCliente NOT IN
(
SELECT TOP 0 IdCliente FROM Clientes
ORDER BY IdCliente
)
ORDER BY IdCliente
Ahora tomando los siguientes 10 registros:
SELECT TOP 10 * FROM Clientes
WHERE IdCliente NOT IN
(
SELECT TOP 10 IdCliente FROM Clientes
ORDER BY IdCliente
)
ORDER BY IdCliente
Ahora tomando el tercer grupo (TOP 20) de 10 registros (TOP 10):
SELECT TOP 10 * FROM Clientes
WHERE IdCliente NOT IN
(
SELECT TOP 20 IdCliente FROM Clientes
ORDER BY IdCliente
)
ORDER BY IdCliente
Obsérvese la aplicación de filtros al ejemplo anterior.
SELECT TOP 10 * FROM Clientes
WHERE IdCliente NOT IN
(
SELECT TOP 20 IdCliente FROM Clientes
WHERE Vigencia > GetDate()
ORDER BY IdCliente
)
AND WHERE Vigencia > GetDate()
ORDER BY IdCliente
Manejando llaves primarias en un DataSet
Supongamos que requerimos una tabla que tenga dos columnas: ID y Nombre. La primera columna (ID) deberá ser llave primaria y además será de tipo "UniqueIdentifier" de modo que nos permita almacenar valores alfanuméricos y que no se repitan.
Dim dsProcesadas As New DataSet("MiDataSet")
Dim newTable1 As New DataTable("MiTabla1")
dsProcesadas.Tables.Add(newTable1)
newTable1.Columns.Add("ID", Type.GetType("System.Guid"), "")
newTable1.Columns.Add("Nombre", Type.GetType("System.String"), "")
Dim key(0) As DataColumn
key(0) = newTable1.Columns("ID")
newTable1.PrimaryKey = key
¿Cómo añado registros?
Es muy fácil, podemos crear una rutina muy aparte que lo haga y que reciba como parámetros los valores de las columnas. No nos confundamos, veamos el ejemplo:
Sub CreaRegistro(ByVal GuidID As Guid,ByVal StrNombre As String, ByRef ds As DataSet)
Dim row As DataRow
row = ds.Tables("MiTabla1").NewRow
ds.Tables("MiTabla1").Rows.Add(row)
row("ID") = GuidID
row("Nombre") = StrNombre
End Sub
Juntemos todo el código en la siguiente función:
<script runat="server">
Sub Page_Load()
Dim ds As new DataSet
ds = GetDataSetPrincipal()
'# A PARTIR DE AQUI PODEMOS HACER Y DESHACER
'# EN EL DATASET
End Sub
Function GetDataSetPrincipal() As DataSet
Dim ds As New DataSet("MiDataSet")
Dim newTable1 As New DataTable("MiTabla1")
ds.Tables.Add(newTable1)
newTable1.Columns.Add("ID", Type.GetType("System.Guid"), "")
newTable1.Columns.Add("Nombre", Type.GetType("System.String"), "")
Dim key(0) As DataColumn
key(0) = newTable1.Columns("ID")
newTable1.PrimaryKey = key
Dim GuidJuan As Guid = New Guid("9CD8769C-7DEB-40A0-828E-DBB03556B451")
Dim GuidPedro As Guid = New Guid("9CD8769C-7DEB-40A0-828E-DBB03556B452")
Dim GuidAna As Guid = New Guid("9CD8769C-7DEB-40A0-828E-DBB03556B453")
CreaRegistro(GuidJuan, "Juan" , ds)
CreaRegistro(GuidPedro, "Pedro" , ds)
CreaRegistro(GuidAna, "Ana" , ds)
Return ds
End Function
Sub CreaRegistro(ByVal GuidID As Guid,ByVal StrNombre As String, ByRef ds As DataSet)
Dim row As DataRow
row = ds.Tables("MiTabla1").NewRow
ds.Tables("MiTabla1").Rows.Add(row)
row("ID") = GuidID
row("Nombre") = StrNombre
End Sub
</script>
Supongamos que requerimos una tabla que tenga dos columnas: ID y Nombre. La primera columna (ID) deberá ser llave primaria y además será de tipo "UniqueIdentifier" de modo que nos permita almacenar valores alfanuméricos y que no se repitan.
Dim dsProcesadas As New DataSet("MiDataSet")
Dim newTable1 As New DataTable("MiTabla1")
dsProcesadas.Tables.Add(newTable1)
newTable1.Columns.Add("ID", Type.GetType("System.Guid"), "")
newTable1.Columns.Add("Nombre", Type.GetType("System.String"), "")
Dim key(0) As DataColumn
key(0) = newTable1.Columns("ID")
newTable1.PrimaryKey = key
¿Cómo añado registros?
Es muy fácil, podemos crear una rutina muy aparte que lo haga y que reciba como parámetros los valores de las columnas. No nos confundamos, veamos el ejemplo:
Sub CreaRegistro(ByVal GuidID As Guid,ByVal StrNombre As String, ByRef ds As DataSet)
Dim row As DataRow
row = ds.Tables("MiTabla1").NewRow
ds.Tables("MiTabla1").Rows.Add(row)
row("ID") = GuidID
row("Nombre") = StrNombre
End Sub
Juntemos todo el código en la siguiente función:
<script runat="server">
Sub Page_Load()
Dim ds As new DataSet
ds = GetDataSetPrincipal()
'# A PARTIR DE AQUI PODEMOS HACER Y DESHACER
'# EN EL DATASET
End Sub
Function GetDataSetPrincipal() As DataSet
Dim ds As New DataSet("MiDataSet")
Dim newTable1 As New DataTable("MiTabla1")
ds.Tables.Add(newTable1)
newTable1.Columns.Add("ID", Type.GetType("System.Guid"), "")
newTable1.Columns.Add("Nombre", Type.GetType("System.String"), "")
Dim key(0) As DataColumn
key(0) = newTable1.Columns("ID")
newTable1.PrimaryKey = key
Dim GuidJuan As Guid = New Guid("9CD8769C-7DEB-40A0-828E-DBB03556B451")
Dim GuidPedro As Guid = New Guid("9CD8769C-7DEB-40A0-828E-DBB03556B452")
Dim GuidAna As Guid = New Guid("9CD8769C-7DEB-40A0-828E-DBB03556B453")
CreaRegistro(GuidJuan, "Juan" , ds)
CreaRegistro(GuidPedro, "Pedro" , ds)
CreaRegistro(GuidAna, "Ana" , ds)
Return ds
End Function
Sub CreaRegistro(ByVal GuidID As Guid,ByVal StrNombre As String, ByRef ds As DataSet)
Dim row As DataRow
row = ds.Tables("MiTabla1").NewRow
ds.Tables("MiTabla1").Rows.Add(row)
row("ID") = GuidID
row("Nombre") = StrNombre
End Sub
</script>
Ejecutar sentencias SQL de modo práctico
Para ello utilizaremos una función llamada RunSQLBD que puede llamarse de dos formas: una es simplemente enviándole como parámetro una sentencia SQL y la otra es enviándole la sentencia más los parámetros SQL que deseemos utilizar.
En ambos casos las sentencias deben ser de tipo INSERT, UPDATE o DELETE. Los parámetros SQL evitan que alguien realice el famoso SQL Injection, modificando nuestras sentencias a su antojo y realizando estragos en nuestra base de datos.
Recordemos que .NET es un lenguaje que permite la abstracción, así que veamos primero cómo utilizar la función RunSQLBD para mostrar lo sencillo que es. Supongamos que tenemos una aplicación que manipula una libreta de direcciones y el usuario ha proporcionado los datos necesarios y es momento de guardar un nuevo registro. La siguiente función recibe la información (que previamente hemos validado) y realiza la inserción.
Sub GuardarLibretaDireccion(ByVal StrNombre As String, ByVal StrCorreo As String, ByVal StrNotas As String, ByVal BlnActivo As Boolean)
Dim StrSQL As String = ""
StrSQL &= " INSERT INTO LibretaDirecciones(Nombre, Correo, Notas, Activo)"
StrSQL &= " VALUES(@Titulo, @Correo, @Notas, @Activo)"
Try
Dim Parametros(3) As OleDbParameter
Parametros(0) = New OleDbParameter("@Nombre", OleDbType.VarChar, 255)
Parametros(1) = New OleDbParameter("@Correo", OleDbType.VarChar, 100)
Parametros(2) = New OleDbParameter("@Notas", OleDbType.LongVarChar, 8000)
Parametros(3) = New OleDbParameter("@Activo", OleDbType.Boolean)
Parametros(0).Value = StrNombre
Parametros(1).Value = StrCorreo
Parametros(2).Value = StrNotas
Parametros(3).Value = BlnActivo
RunSQLBD(StrSQL, Parametros)
Catch ex As Exception
'AQUÍ REALIZAMOS ALGUNA ACCIÓN SI ALGO FALLA (QUIZÁ QUIERAS RECIBIR POR CORREO EL DETALLE DEL ERROR.
End Try
End Sub
Ahora veamos el mismo ejemplo pero sin utilizar parámetros SQL:
Sub GuardarLibretaDireccion(ByVal StrNombre As String, ByVal StrCorreo As String, ByVal StrNotas As String, ByVal BlnActivo As Boolean)
Dim StrSQL As String = ""
StrSQL &= " INSERT INTO LibretaDirecciones(Nombre, Correo, Notas, Activo)"
StrSQL &= " VALUES('" & StrNombre & "', '" & StrCorreo & "', '" & StrNotas & "', '" & BlnActivo & "')"
Try
RunSQLBD(StrSQL, Parametros)
Catch ex As Exception
'AQUÍ REALIZAMOS ALGUNA ACCIÓN SI ALGO FALLA (QUIZÁ QUIERAS RECIBIR POR CORREO EL DETALLE DEL ERROR.
End Try
End Sub
Fácil, ¿no?
Ahora sí! Aquí están las dos funciones que lo hacen todo. Hemos colocado Overloads para que se entienda que ambas tendrán el mismo nombre. Si al llamar a RunSQLBD le colocamos un solo parámetro se ejecutará la primera, si por otro lado colocamos 2 parámetros entonces simplemente se ejecutará la segunda.
Public Overloads Sub RunSQLBD(ByVal StrSQL As String)
Dim dbConnection As New OleDbConnection(System.Web.Configuration.WebConfigurationManager.AppSettings(GetBDKey()))
Dim dbCommand As New OleDbCommand(StrSQL, dbConnection)
Try
dbConnection.Open()
dbCommand.ExecuteNonQuery()
Catch ex As Exception
Throw New Exception(ex.Message, ex.InnerException)
'THROW NOS PERMITIRÁ CACHAR EL ERROR EN CUALQUIER LUGAR DONDE SE MANDE LLAMAR ESTA RUTINA
Finally
dbConnection.Close()
End Try
End Sub
Public Overloads Sub RunSQLBD(ByVal StrSQL As String, ByVal SqlParametros As OleDbParameter())
Dim dbConnection As New OleDbConnection(System.Web.Configuration.WebConfigurationManager.AppSettings(GetBDKey()))
Dim dbCommand As New OleDbCommand(StrSQL, dbConnection)
For Each objpar As OleDbParameter In SqlParametros
dbCommand.Parameters.Add(objpar)
Next
Try
dbConnection.Open()
dbCommand.ExecuteNonQuery()
dbConnection.Close()
Catch ex As Exception
Throw New Exception(ex.Message, ex.InnerException)
'THROW NOS PERMITIRÁ CACHAR EL ERROR EN CUALQUIER LUGAR DONDE SE MANDE LLAMAR ESTA RUTINA
Finally
dbConnection.Close()
End Try
End Sub
Es bastante código para estas dos funciones. Pero de esta forma se ejecutarán sentencias de un modo seguro y no tendremos que escribir todo este código cada vez que queramos realizar una acción en la base de datos.
Ah! Eso de "MiBasedeDatos" significa que hemos creado en el archivo web.config una etiqueta de tipo:
<appSettings>
<add key="MiBasedeDatos" value="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\...\Northwind.mdb"/>
</appSettings>
Este ejemplo se basa en Access; si estás utilizando SQL tendrás que cambiar los objetos OleDb a SQL, por ejemplo OleDbParameter por SqlParameter. Y claro, el "value" que aparece en el código perteneciente al web.config cambiará por una cadena de conexión que sea correcta para tu base de datos SQL.
Para ello utilizaremos una función llamada RunSQLBD que puede llamarse de dos formas: una es simplemente enviándole como parámetro una sentencia SQL y la otra es enviándole la sentencia más los parámetros SQL que deseemos utilizar.
En ambos casos las sentencias deben ser de tipo INSERT, UPDATE o DELETE. Los parámetros SQL evitan que alguien realice el famoso SQL Injection, modificando nuestras sentencias a su antojo y realizando estragos en nuestra base de datos.
Recordemos que .NET es un lenguaje que permite la abstracción, así que veamos primero cómo utilizar la función RunSQLBD para mostrar lo sencillo que es. Supongamos que tenemos una aplicación que manipula una libreta de direcciones y el usuario ha proporcionado los datos necesarios y es momento de guardar un nuevo registro. La siguiente función recibe la información (que previamente hemos validado) y realiza la inserción.
Sub GuardarLibretaDireccion(ByVal StrNombre As String, ByVal StrCorreo As String, ByVal StrNotas As String, ByVal BlnActivo As Boolean)
Dim StrSQL As String = ""
StrSQL &= " INSERT INTO LibretaDirecciones(Nombre, Correo, Notas, Activo)"
StrSQL &= " VALUES(@Titulo, @Correo, @Notas, @Activo)"
Try
Dim Parametros(3) As OleDbParameter
Parametros(0) = New OleDbParameter("@Nombre", OleDbType.VarChar, 255)
Parametros(1) = New OleDbParameter("@Correo", OleDbType.VarChar, 100)
Parametros(2) = New OleDbParameter("@Notas", OleDbType.LongVarChar, 8000)
Parametros(3) = New OleDbParameter("@Activo", OleDbType.Boolean)
Parametros(0).Value = StrNombre
Parametros(1).Value = StrCorreo
Parametros(2).Value = StrNotas
Parametros(3).Value = BlnActivo
RunSQLBD(StrSQL, Parametros)
Catch ex As Exception
'AQUÍ REALIZAMOS ALGUNA ACCIÓN SI ALGO FALLA (QUIZÁ QUIERAS RECIBIR POR CORREO EL DETALLE DEL ERROR.
End Try
End Sub
Ahora veamos el mismo ejemplo pero sin utilizar parámetros SQL:
Sub GuardarLibretaDireccion(ByVal StrNombre As String, ByVal StrCorreo As String, ByVal StrNotas As String, ByVal BlnActivo As Boolean)
Dim StrSQL As String = ""
StrSQL &= " INSERT INTO LibretaDirecciones(Nombre, Correo, Notas, Activo)"
StrSQL &= " VALUES('" & StrNombre & "', '" & StrCorreo & "', '" & StrNotas & "', '" & BlnActivo & "')"
Try
RunSQLBD(StrSQL, Parametros)
Catch ex As Exception
'AQUÍ REALIZAMOS ALGUNA ACCIÓN SI ALGO FALLA (QUIZÁ QUIERAS RECIBIR POR CORREO EL DETALLE DEL ERROR.
End Try
End Sub
Fácil, ¿no?
Ahora sí! Aquí están las dos funciones que lo hacen todo. Hemos colocado Overloads para que se entienda que ambas tendrán el mismo nombre. Si al llamar a RunSQLBD le colocamos un solo parámetro se ejecutará la primera, si por otro lado colocamos 2 parámetros entonces simplemente se ejecutará la segunda.
Public Overloads Sub RunSQLBD(ByVal StrSQL As String)
Dim dbConnection As New OleDbConnection(System.Web.Configuration.WebConfigurationManager.AppSettings(GetBDKey()))
Dim dbCommand As New OleDbCommand(StrSQL, dbConnection)
Try
dbConnection.Open()
dbCommand.ExecuteNonQuery()
Catch ex As Exception
Throw New Exception(ex.Message, ex.InnerException)
'THROW NOS PERMITIRÁ CACHAR EL ERROR EN CUALQUIER LUGAR DONDE SE MANDE LLAMAR ESTA RUTINA
Finally
dbConnection.Close()
End Try
End Sub
Public Overloads Sub RunSQLBD(ByVal StrSQL As String, ByVal SqlParametros As OleDbParameter())
Dim dbConnection As New OleDbConnection(System.Web.Configuration.WebConfigurationManager.AppSettings(GetBDKey()))
Dim dbCommand As New OleDbCommand(StrSQL, dbConnection)
For Each objpar As OleDbParameter In SqlParametros
dbCommand.Parameters.Add(objpar)
Next
Try
dbConnection.Open()
dbCommand.ExecuteNonQuery()
dbConnection.Close()
Catch ex As Exception
Throw New Exception(ex.Message, ex.InnerException)
'THROW NOS PERMITIRÁ CACHAR EL ERROR EN CUALQUIER LUGAR DONDE SE MANDE LLAMAR ESTA RUTINA
Finally
dbConnection.Close()
End Try
End Sub
Es bastante código para estas dos funciones. Pero de esta forma se ejecutarán sentencias de un modo seguro y no tendremos que escribir todo este código cada vez que queramos realizar una acción en la base de datos.
Ah! Eso de "MiBasedeDatos" significa que hemos creado en el archivo web.config una etiqueta de tipo:
<appSettings>
<add key="MiBasedeDatos" value="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\...\Northwind.mdb"/>
</appSettings>
Este ejemplo se basa en Access; si estás utilizando SQL tendrás que cambiar los objetos OleDb a SQL, por ejemplo OleDbParameter por SqlParameter. Y claro, el "value" que aparece en el código perteneciente al web.config cambiará por una cadena de conexión que sea correcta para tu base de datos SQL.
Confirmación javascript para botones NET
Teniendo el botón:
<asp:Button id="btnEliminar" onClick="EliminaElemento" runat="server" />
procedemos a aplicar la función javascript que mostrará la ventana de confirmación:
btnEliminar.Attributes("onClick") = "return confirm('¿Esta seguro de querer eliminar este elemento?');"
también se puede realizar así:
btnEliminar.Attributes.Add("onClick", "return confirm('¿Esta seguro de querer eliminar este elemento?');")
Observar que el botón tiene su evento OnClick propio de servidor (manda llamar una función que, en nuestro caso, se llama EliminaElemento) y aparte estamos añadiendo otro evento onClick para que se ejecute en modo cliente (javascript). Hay que tener en cuenta que javascript en sensible al uso de mayúsculas por lo que "onclick" no es lo mismo que "onClick".
Teniendo el botón:
<asp:Button id="btnEliminar" onClick="EliminaElemento" runat="server" />
procedemos a aplicar la función javascript que mostrará la ventana de confirmación:
btnEliminar.Attributes("onClick") = "return confirm('¿Esta seguro de querer eliminar este elemento?');"
también se puede realizar así:
btnEliminar.Attributes.Add("onClick", "return confirm('¿Esta seguro de querer eliminar este elemento?');")
Observar que el botón tiene su evento OnClick propio de servidor (manda llamar una función que, en nuestro caso, se llama EliminaElemento) y aparte estamos añadiendo otro evento onClick para que se ejecute en modo cliente (javascript). Hay que tener en cuenta que javascript en sensible al uso de mayúsculas por lo que "onclick" no es lo mismo que "onClick".
miércoles, 29 de agosto de 2007
Para redirigir una pagina a otra que no este por defaul en la master:
esto va en el boton, link o de donde se quiera rediriguir:
Protected Sub btnRegistrarse_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnRegistrarse.Click
Dim strDoLoginURL As String = "registrousuario.aspx?redirect=" & Server.UrlEncode(Request.ServerVariables("Script_Name").Substring(Request.ServerVariables("Script_Name").LastIndexOf("/") + 1))
If Len(Request.QueryString.ToString()) > 0 Then
strDoLoginURL += "?" & Server.UrlEncode(Request.QueryString.ToString())
End If
If Session("strusuario") = Nothing Then Response.Redirect(strDoLoginURL)
End Sub
y en la pagina a donde se envio se pone esto, para q se vaya con las variables de session ya cargadas:
If Len(Request("redirect")) > 0 Then
Dim StrRedirect As String = ""
StrRedirect = Server.UrlEncode(Request("redirect"))
Session("strusuario") = struser
Session("strCorreo") = StrCorreo
Response.Redirect(StrRedirect)
End If
esto va en el boton, link o de donde se quiera rediriguir:
Protected Sub btnRegistrarse_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnRegistrarse.Click
Dim strDoLoginURL As String = "registrousuario.aspx?redirect=" & Server.UrlEncode(Request.ServerVariables("Script_Name").Substring(Request.ServerVariables("Script_Name").LastIndexOf("/") + 1))
If Len(Request.QueryString.ToString()) > 0 Then
strDoLoginURL += "?" & Server.UrlEncode(Request.QueryString.ToString())
End If
If Session("strusuario") = Nothing Then Response.Redirect(strDoLoginURL)
End Sub
y en la pagina a donde se envio se pone esto, para q se vaya con las variables de session ya cargadas:
If Len(Request("redirect")) > 0 Then
Dim StrRedirect As String = ""
StrRedirect = Server.UrlEncode(Request("redirect"))
Session("strusuario") = struser
Session("strCorreo") = StrCorreo
Response.Redirect(StrRedirect)
End If
Validando sesión mediante archivo master
Sub Page_Init()
Dim BlnValidarSesion As Boolean = True
Dim StrPagesNotToValidateSession() As String = {"login.aspx", "recuperarpassword.aspx", "registro.aspx"}
For Each StrPage As String In StrPagesNotToValidateSession
If StrPage = StrPageName Then BlnValidarSesion = False
Next
If BlnValidarSesion Then
ValidateSession()
End If
End Sub
Sub ValidateSession()
Dim strDoLoginURL As String = "login.aspx?redirect=" & Server.UrlEncode(Request.ServerVariables("Script_Name").Substring(Request.ServerVariables("Script_Name").LastIndexOf("/") + 1))
If Len(Request.QueryString.ToString()) > 0 Then
strDoLoginURL += "?" & Server.UrlEncode(Request.QueryString.ToString())
End If
If Session("Usuario") = Nothing Then Response.Redirect(strDoLoginURL)
End Sub
El siguiente código nos permite que todos los archivos que estén relacionados con nuestro archivo master, estén validados por sesión. Y cuando queramos que sólo algunos archivos no estén validados por sesión entonces utilizaremos un array especificando qué archivos no se validarán.
El siguiente código deberá estar contenido en el archivo master que estemos utilizando.
Sub Page_Init()
Dim BlnValidarSesion As Boolean = True
Dim StrPagesNotToValidateSession() As String = {"login.aspx", "recuperarpassword.aspx", "registro.aspx"}
For Each StrPage As String In StrPagesNotToValidateSession
If StrPage = StrPageName Then BlnValidarSesion = False
Next
If BlnValidarSesion Then
ValidateSession()
End If
End Sub
Sub ValidateSession()
Dim strDoLoginURL As String = "login.aspx?redirect=" & Server.UrlEncode(Request.ServerVariables("Script_Name").Substring(Request.ServerVariables("Script_Name").LastIndexOf("/") + 1))
If Len(Request.QueryString.ToString()) > 0 Then
strDoLoginURL += "?" & Server.UrlEncode(Request.QueryString.ToString())
End If
If Session("Usuario") = Nothing Then Response.Redirect(strDoLoginURL)
End Sub
Suscribirse a:
Comentarios (Atom)