Algunos dirán: "para qué hardcodeas la consulta SQL? simplemente haz un procedimiento almacenado y asunto solucionado".
La verdad que a veces necesitamos este tipo de soluciones que no siempre parecen ser las óptimas, no en vano tenemos la opción de hardcodear
Además, una consulta hardcodeada también puede evitar las inyecciones SQL si pasas la información mediante parámetros.
Ahora sí, vamos al ejemplo.
1.- Abrimos el SQL SERVER Y creamos una tabla llamada cmon_group, con este script:
CREATE TABLE [dbo].[cmon_group] ( [groupid] [int] IDENTITY(1,1) NOT NULL, [title] [varchar](150) NULL, [description] [varchar](500) NULL, [icon] [varchar](50) NULL, CONSTRAINT [pk_cmon_group] PRIMARY KEY CLUSTERED ( [groupid] ASC ) )2.- Abrimos Visual Studio y creamos un nuevo proyecto de tipo ASP.NET con Visual Basic, agregamos una páginas aspx y ponemos este código:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim Title As String = "title" Dim description As String = "description" Dim icon As String = "icon" Dim connectionString As New SqlClient.SqlConnection("LA_CADENA_DE_CONEXION_VA_AQUI") Dim t_sql As String = "INSERT INTO [cmon_group](Title,description,icon) " t_sql &= "VALUES(@title,@description,@icon) " t_sql &= "SET @groupid = SCOPE_IDENTITY()" Dim command As New SqlClient.SqlCommand(t_sql, connectionString) command.CommandType = CommandType.Text Dim p_groupid As New SqlClient.SqlParameter("@groupid", SqlDbType.Int) p_groupid.Direction = ParameterDirection.Output command.Parameters.Add(p_groupid) command.Parameters.AddWithValue("@title", Title) command.Parameters.AddWithValue("@description", description) command.Parameters.AddWithValue("@icon", icon) command.Connection.Open() command.ExecuteNonQuery() command.Connection.Close() 'here is the return value Dim groupid As Integer = CInt(p_groupid.Value) End SubAsí de simple, aquí la parte interesante está en las líneas donde añado un parámetro llamado groupid, el cual es de tipo OUTPUT… lo cual me permite obtener el valor de retorno de la clave primaria, la cual se almacena en SCOPE_IDENTITY().
Es todo, espero que les sea de utilidad
2 comentarios:
Buenos dias,
Tengo un upload de ficheros.
Al momento de insertar el fichero quiero cojer el ID del ScopeIdentity para dar un nombre especifico al fichero por ejemplo.
1CV.doc
2CV.doc
etc.
lo hago en c#
Me funciona el upload y puedo generar el ID del scope con un stocked procedure pero no consigo en cogerlo para ponerlo en el nombre del fichero.
Gracias si puede ayudarme.
From Belgica
Ricardo
Hola,
puedes enviarme el código que usas y no te está funcionando?
envíalo a
sserrano at jabs dot com dot pe
Saludos
Publicar un comentario