Foros del Web » Programación para mayores de 30 ;) » .NET »

Crear procedimiento almacenado

Estas en el tema de Crear procedimiento almacenado en el foro de .NET en Foros del Web. Buenas. No tengo ningún problema a la hora de crear un procedimiento almacenado en la base de datos SQL Server, pero lo que me gustaría ...
  #1 (permalink)  
Antiguo 08/03/2005, 12:02
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
Crear procedimiento almacenado

Buenas. No tengo ningún problema a la hora de crear un procedimiento almacenado en la base de datos SQL Server, pero lo que me gustaría es poder crearlos en tiempo de ejecución. He intentado esto pero me da error de sintáxis cerca de la palabra "PROCEDURE":

Código:
Dim con As New SqlConnection
        con.ConnectionString = ConfigurationSettings.AppSettings("constring")
        Dim cmd As SqlCommand = con.CreateCommand
        cmd.CommandType = CommandType.Text
        cmd.CommandText = "CREATE PROCEDURE SP_Controles @portal nvarchar" & _
                                " AS" & _
                                " SELECT * FROM portal_controles" & _
                                " WHERE Panel LIKE @portal + '%'" & _
                                " ORDER BY Panel"
          con.Open()
          cmd.ExecuteNonQuery()
          con.Close()
¿Alguna idea o voy totalmete desencaminado?
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #2 (permalink)  
Antiguo 08/03/2005, 12:29
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
mmm, no detecto nada raro en tu code..., , estas seguro que te marca error en "PROCEDURE" ??

Porque yo hice ésto y me funcionó:

Cita:
Dim con As SqlConnection
Dim cmd As SqlCommand
Dim sSQL As String = "CREATE PROCEDURE AD_Controles @portal nvarchar" & _
" AS" & _
" SELECT * FROM portal_controles" & _
" WHERE Panel LIKE @portal + '%'" & _
" ORDER BY Panel"

con = New SqlConnection(ConfigurationSettings.AppSettings("c onstring"))
cmd = con.CreateCommand
cmd.CommandType = CommandType.Text
cmd.CommandText = sSQL

con.Open()
cmd.ExecuteNonQuery()
con.Close()
Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #3 (permalink)  
Antiguo 09/03/2005, 08:20
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
Gracias RootK por contestar.

Cita:
Detalles de la excepción: System.Data.SqlClient.SqlException: Incorrect syntax near the keyword 'PROCEDURE'.
te pongo el código exacto:

Código:
        Dim con As New SqlConnection
        con.ConnectionString = ConfigurationSettings.AppSettings("constring")
        Dim cmd As SqlCommand = con.CreateCommand
        cmd.CommandType = CommandType.StoredProcedure
        Dim da As New SqlDataAdapter
        Dim nFilas As Integer
        Dim fechaInicio As New DateTime(1000, 1, 1) 'Fecha base: 01/01/1000
        Dim ts As TimeSpan = DateTime.Now.Subtract(fechaInicio)
        Dim nDias As Integer = ts.Days
        Dim i As Integer

        'Lista de controles

        cmd.CommandText = "SP_Controles"
        cmd.Parameters.Add("@portal", portal)
        da.SelectCommand = cmd
        Dim dtControles As New DataTable("Controles")
        Try
            da.Fill(dtControles)
        Catch ex As SqlException
            If ex.Number = 2812 Then 'No se ha encontrado el SP
                'CREAR STORE PROCEDURE SP_Controles
                '############################################3
                cmd.CommandType = CommandType.Text
                cmd.CommandText = "CREATE PROCEDURE SP_Controles @portal nvarchar" & _
                                " AS" & _
                                " SELECT * FROM portales_controles" & _
                                " WHERE Panel LIKE @portal + '%'" & _
                                " ORDER BY Panel"
                con.Open()
                cmd.ExecuteNonQuery()
                con.Close()
            End If
        End Try

......
Gracias.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #4 (permalink)  
Antiguo 09/03/2005, 09:25
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Por lo que estoy viendo te marcar error porque estas usando el objecto command 2 veces sobre la misma instancia, si lo que quieres es borrar verificar si existe el SP para borrarlo y despues crearlo podrías mejor hacer así tu code..

Código:
  
Dim oConn As New SqlConnection(System.Configuration.ConfigurationSettings.AppSettings("connectionString"))
        Dim sSQL As String

'Verifico si existe el SP  ;-) 
        sSQL = "IF EXISTS (select * from dbo.sysobjects where id = object_id(N'[dbo].[SP_Controles]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)" & _
        " DROP PROCEDURE [dbo].SP_Controles"

        Dim oCmd As SqlCommand

        oCmd = New SqlCommand
        oCmd.CommandText = sSQL
        oCmd.Connection = oConn
        oConn.Open()
        oCmd.ExecuteNonQuery()
        oConn.Close()

'Creo el SP  :cool: 
        sSQL = " CREATE PROCEDURE SP_Controles @portal nvarchar" & _
        " AS" & _
        " SELECT * FROM portales_controles" & _
        " WHERE Panel LIKE @portal + '%'" & _
        " ORDER BY Panel"

        oCmd = New SqlCommand
        oCmd.CommandText = sSQL
        oCmd.Connection = oConn
        oConn.Open()
        oCmd.ExecuteNonQuery()
        oConn.Close()
Es una idea general y mas limpia de hacerlo, prueba y nos cuentas que tal..
  #5 (permalink)  
Antiguo 09/03/2005, 10:15
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
¿Eh? No, no. Lo que pretendo es símplemente ejecutar el SP, pero si por lo que sea, no existe, crearlo. Por eso uso primero el objeto Command como SP y luego, si no existe el SP, como texto, para crear el SP.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #6 (permalink)  
Antiguo 09/03/2005, 11:06
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
El caso es que si el código para crear el SP lo saco del try-catch sí que me lo crea
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:06.