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..