Recuperar ID de un registro que recién se insertó
Ejemplo para recuerar un id de una registro que recién se insertó en la BD. Normalmente se requiere ese id para insertar un segundo registro, muy usado en transacciones de SQL.
Private Sub ExecuteSqlTransaction(ByVal connectionString As String)
Using connection As New SqlConnection(connectionString)
connection.Open()
Dim intRegionID As Integer
Dim command As SqlCommand = connection.CreateCommand()
Dim transaction As SqlTransaction
' Start a local transaction
transaction = connection.BeginTransaction("SampleTransaction")
' Must assign both transaction object and connection
' to Command object for a pending local transaction.
command.Connection = connection
command.Transaction = transaction
Try
command.CommandText = _
"Insert into Region (RegionName, RegionDescription) VALUES (100, 'Description');SELECT @@Identity"
'Get the Region ID in the intRegionID variable
'Very important to use ExecuteScalar in order to get the
'numeric value of the ID
intRegionID = command.ExecuteScalar()
'Now we can use that id to our next SQL statement
command.CommandText = _
"Insert into RegionGroup (RegionID, RegionName) VALUES (" & RegionID & ", 'Description')"
command.ExecuteNonQuery()
' Attempt to commit the transaction.
transaction.Commit()
Console.WriteLine("Both records are written to database.")
Catch ex As Exception
Console.WriteLine("Commit Exception Type: {0}", ex.GetType())
Console.WriteLine(" Message: {0}", ex.Message)
' Attempt to roll back the transaction.
Try
transaction.Rollback()
Catch ex2 As Exception
' This catch block will handle any errors that may have occurred
' on the server that would cause the rollback to fail, such as
' a closed connection.
Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType())
Console.WriteLine(" Message: {0}", ex2.Message)
End Try
End Try
End Using
End Sub
lunes, 17 de septiembre de 2007
Ejemplo de SqlTransaction
Aquí un ejemplo para realizar transacciones en SQL, muy util cuando se van a insertar más de 1 registro en una BD
Private Sub ExecuteSqlTransaction(ByVal connectionString As String)
Using connection As New SqlConnection(connectionString)
connection.Open()
Dim command As SqlCommand = connection.CreateCommand()
Dim transaction As SqlTransaction
' Start a local transaction
transaction = connection.BeginTransaction("SampleTransaction")
' Must assign both transaction object and connection
' to Command object for a pending local transaction.
command.Connection = connection
command.Transaction = transaction
Try
command.CommandText = _
"Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')"
command.ExecuteNonQuery()
command.CommandText = _
"Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')"
command.ExecuteNonQuery()
' Attempt to commit the transaction.
transaction.Commit()
Console.WriteLine("Both records are written to database.")
Catch ex As Exception
Console.WriteLine("Commit Exception Type: {0}", ex.GetType())
Console.WriteLine(" Message: {0}", ex.Message)
' Attempt to roll back the transaction.
Try
transaction.Rollback()
Catch ex2 As Exception
' This catch block will handle any errors that may have occurred
' on the server that would cause the rollback to fail, such as
' a closed connection.
Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType())
Console.WriteLine(" Message: {0}", ex2.Message)
End Try
End Try
End Using
End Sub
Aquí un ejemplo para realizar transacciones en SQL, muy util cuando se van a insertar más de 1 registro en una BD
Private Sub ExecuteSqlTransaction(ByVal connectionString As String)
Using connection As New SqlConnection(connectionString)
connection.Open()
Dim command As SqlCommand = connection.CreateCommand()
Dim transaction As SqlTransaction
' Start a local transaction
transaction = connection.BeginTransaction("SampleTransaction")
' Must assign both transaction object and connection
' to Command object for a pending local transaction.
command.Connection = connection
command.Transaction = transaction
Try
command.CommandText = _
"Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')"
command.ExecuteNonQuery()
command.CommandText = _
"Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')"
command.ExecuteNonQuery()
' Attempt to commit the transaction.
transaction.Commit()
Console.WriteLine("Both records are written to database.")
Catch ex As Exception
Console.WriteLine("Commit Exception Type: {0}", ex.GetType())
Console.WriteLine(" Message: {0}", ex.Message)
' Attempt to roll back the transaction.
Try
transaction.Rollback()
Catch ex2 As Exception
' This catch block will handle any errors that may have occurred
' on the server that would cause the rollback to fail, such as
' a closed connection.
Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType())
Console.WriteLine(" Message: {0}", ex2.Message)
End Try
End Try
End Using
End Sub
Etiquetas:
sqltransaction,
transaccion,
transacciones
viernes, 14 de septiembre de 2007
Creación de trigger
Un trigger ayuda a gestionar de una mejor forma la información que se encuentra en la BD. De este modo cuando la información sea modificada, podrán ejecutarse acciones diversas. Ejemplos de ello pueden ser:
1. Al eliminar un registro se eliminen otros cuantos de otras tablas
2. Al insertar un registro se lleve a cabo una validación
3. Al actualizar un registro, actualizar otras tablas
4. Al insertar un registro, insertar otros cuantos en otras tablas
Para crear un trigger sólo hace falta ejecutar una sentencia como la siguiente, colocando los textos en negritas con sus valores correspondientes. En este caso el trigger aplica justo después de haber insertado un nuevo registro en MiTabla2.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [NombreDelTrigger]
ON [dbo].[MiTabla2]
AFTER INSERT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
IF (SELECT COUNT(*) FROM MiTabla2, inserted WHERE (MiTabla2.IdUsuario = inserted.IdUsuario)) > 10
BEGIN
RAISERROR('No se pueden insertar mas de 10 registros para un usuario', 16, 1)
ROLLBACK TRANSACTION
END
END
GO
Un trigger ayuda a gestionar de una mejor forma la información que se encuentra en la BD. De este modo cuando la información sea modificada, podrán ejecutarse acciones diversas. Ejemplos de ello pueden ser:
1. Al eliminar un registro se eliminen otros cuantos de otras tablas
2. Al insertar un registro se lleve a cabo una validación
3. Al actualizar un registro, actualizar otras tablas
4. Al insertar un registro, insertar otros cuantos en otras tablas
Para crear un trigger sólo hace falta ejecutar una sentencia como la siguiente, colocando los textos en negritas con sus valores correspondientes. En este caso el trigger aplica justo después de haber insertado un nuevo registro en MiTabla2.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [NombreDelTrigger]
ON [dbo].[MiTabla2]
AFTER INSERT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
IF (SELECT COUNT(*) FROM MiTabla2, inserted WHERE (MiTabla2.IdUsuario = inserted.IdUsuario)) > 10
BEGIN
RAISERROR('No se pueden insertar mas de 10 registros para un usuario', 16, 1)
ROLLBACK TRANSACTION
END
END
GO
viernes, 7 de septiembre de 2007
ASCX dentro de DataGrid
Importante: Antes que todo deberás saber que esto no funciona con GridView, de modo que tendremos que recurrir al DataGrid que es más flexible.
Supongamos que tenemos en un archivo ASPX algo como lo siguiente:
<asp:DataGrid ID="dg1" AutoGenerateColumns="False" runat="server">
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<asp:Label ID="lldld" Text='<%# DataBinder.Eval(Container.DataItem, "FechaNacimiento")%>' runat="server" /><br />
<asp:Label ID="Label1" Text='<%# DataBinder.Eval(Container.DataItem, "Sexo")%>' runat="server" />
<asp:Label ID="Label2" Text='<%# DataBinder.Eval(Container.DataItem, "Apellidos")%>' runat="server" />
<asp:Label ID="Label3" Text='<%# DataBinder.Eval(Container.DataItem, "ClaveNivel")%>' runat="server" />
<MisComponentes:Micontrol ID="control1" ValorAsignar='<%# DataBinder.Eval(Container.DataItem, "Nombres")%>' runat="server" />
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
Tomar en cuenta que "control1" ya fue registrado en el aspx mediante la directiva @Register.
Ahora veamos cómo está conformado el ASCX.
<%@ Control Language="vb" AutoEventWireup="true" %>
<asp:Label ID="lblUsuario" runat="server" />
<script runat="server">
Public Property ValorAsignar() As String
Get
Return lblUsuario.Text
End Get
Set(ByVal value As String)
lblUsuario.Text = value
End Set
End Property
</script>
En este caso existe una propiedad llamada "ValorAsignar" que permite colocar y/o obtener el valor del label.
Importante: Antes que todo deberás saber que esto no funciona con GridView, de modo que tendremos que recurrir al DataGrid que es más flexible.
Supongamos que tenemos en un archivo ASPX algo como lo siguiente:
<asp:DataGrid ID="dg1" AutoGenerateColumns="False" runat="server">
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<asp:Label ID="lldld" Text='<%# DataBinder.Eval(Container.DataItem, "FechaNacimiento")%>' runat="server" /><br />
<asp:Label ID="Label1" Text='<%# DataBinder.Eval(Container.DataItem, "Sexo")%>' runat="server" />
<asp:Label ID="Label2" Text='<%# DataBinder.Eval(Container.DataItem, "Apellidos")%>' runat="server" />
<asp:Label ID="Label3" Text='<%# DataBinder.Eval(Container.DataItem, "ClaveNivel")%>' runat="server" />
<MisComponentes:Micontrol ID="control1" ValorAsignar='<%# DataBinder.Eval(Container.DataItem, "Nombres")%>' runat="server" />
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
Tomar en cuenta que "control1" ya fue registrado en el aspx mediante la directiva @Register.
Ahora veamos cómo está conformado el ASCX.
<%@ Control Language="vb" AutoEventWireup="true" %>
<asp:Label ID="lblUsuario" runat="server" />
<script runat="server">
Public Property ValorAsignar() As String
Get
Return lblUsuario.Text
End Get
Set(ByVal value As String)
lblUsuario.Text = value
End Set
End Property
</script>
En este caso existe una propiedad llamada "ValorAsignar" que permite colocar y/o obtener el valor del label.
jueves, 6 de septiembre de 2007
lunes, 3 de septiembre de 2007
Utilización de un DropDownList en un GridView (modo editar)
En éste caso el siguiente código lo que hace al darle editar al GridView es que automaticamente muestra el drop cargado y seleccionado en un valor, por ejemplo:
<DropDownList runat="server" ID="DropEjemplo" selectedValue='<%# Bind("Estado")%>' DataSourceID="DSDDL" DataTextField="Estado" DataValueField="IDEstado" />
<asp:SqlDataSource ID="DSDDL"" runat="server" ConnectionString="<%$ ConnectionStrings:NombreBD %>"
SelectCommand="SELECT * FROM Estados order by Estado"/>
Notas:
DataSourceID="" se refiere al Id del DataSource declarado para el Drop.
DataTextField="" se refiere al texto que C/elemento mostrará en el Drop.
DataValueField="" se refiere al valor con el que el C/elemento será identificado en el Drop.
selectedValue='<%# Bind("Estado") %>', se refiere al valor que trae el Gridview.
Los valores especificados deben llamarse igual que como se traen en el Query.
Al dar clic en Update se tomara automaticamente el valor que en ese momento este seleccionado
Ñau
En éste caso el siguiente código lo que hace al darle editar al GridView es que automaticamente muestra el drop cargado y seleccionado en un valor, por ejemplo:
<DropDownList runat="server" ID="DropEjemplo" selectedValue='<%# Bind("Estado")%>' DataSourceID="DSDDL" DataTextField="Estado" DataValueField="IDEstado" />
<asp:SqlDataSource ID="DSDDL"" runat="server" ConnectionString="<%$ ConnectionStrings:NombreBD %>"
SelectCommand="SELECT * FROM Estados order by Estado"/>
Notas:
DataSourceID="" se refiere al Id del DataSource declarado para el Drop.
DataTextField="" se refiere al texto que C/elemento mostrará en el Drop.
DataValueField="" se refiere al valor con el que el C/elemento será identificado en el Drop.
selectedValue='<%# Bind("Estado") %>', se refiere al valor que trae el Gridview.
Los valores especificados deben llamarse igual que como se traen en el Query.
Al dar clic en Update se tomara automaticamente el valor que en ese momento este seleccionado
Ñau
Suscribirse a:
Comentarios (Atom)