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

Ayuda crear un array sqlparameter vb net 2008

Estas en el tema de Ayuda crear un array sqlparameter vb net 2008 en el foro de .NET en Foros del Web. Hola amigos del Foro pues les cuento que tengo un gran problema que esta apunto de darme un derrame cerebral =/ .. lo que pasa ...
  #1 (permalink)  
Antiguo 22/03/2010, 18:10
 
Fecha de Ingreso: noviembre-2006
Mensajes: 9
Antigüedad: 17 años, 5 meses
Puntos: 0
Ayuda crear un array sqlparameter vb net 2008

Hola amigos del Foro pues les cuento que tengo un gran problema que esta apunto de darme un derrame cerebral =/ .. lo que pasa es que tengo dos dudas una sobre teoria y otra sobre crear una funcion de acuerdo al titulo del tema este.... ok les explico mejor

1)por la parte teoria quisiera por favor me explicaran cual es la diferencia de estos instrucciones que hace cada instruccion =/ exactamente:

Dim params As New SqlParameter
Dim params = New SqlParameter()
Dim params() = New SqlParameter() --> no se si esto exista =/..


2) estoy trabajando con programacion 3 capas estoy en mi capa de datos la cual es una clasee dentro de ella quiero hacer una function la cual le pase dos parametros una seria nombre del store procedure"sp_procedure" y el otro parametros() un array k contenga todos los parametros la cual le mandare desde la capa logica ... ejemplo algo asi

-tengo en mi base de datos

"sp_adicionarcliente " la cual contiene 7 parametros p1,p2,p3,.. p7

-en mi capa dato de mi vb net tengo :

Class Dato

public function ejecutaprocedureparametros(byval sProcedure as string, byval parametros() as sqlparametros())
dim param() as sqlparameter --> no se si asi esta bien asi la sintaxis =(
dim cmd as new sqlcommand()
// ya qui se crea un command se le asigna tipo textprocedure y se le pone el nombre del store procedure que se quiere llamar en este caso "sp_adicionarcliente "

for each (param as parametros())
cmd.parameter.add(parm)
next

cmd.exe --> aqui una instruccion que me ejecute el command con todos sus parametros pasados
end function



End Class


algo asi es la ideaa se que e visto muchos que tienden por declarar uno por uno y luevo poner .value a cada uno y es bastante codigo lo que queria saber si se puede crear mi idea en un algoritmo de vb net y pueda funcionar correctamente con cualquier numero de parametros que le envies desde otra capa ...... porfaovr expertos en el tema seria un honor si me podrian dar una solucionnn si es con un ejemplo mucho mejor se que a varios tamb se han topado con esta ideaa y como todo programador quiere hacer codigo reutilizable con n parametros ... ojala me puedan ayudarr de verdad me urgee y estoy por tirarme de la ventana =/ ..saludos
  #2 (permalink)  
Antiguo 24/03/2010, 09:49
 
Fecha de Ingreso: marzo-2010
Mensajes: 3
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Ayuda crear un array sqlparameter vb net 2008

Hola Merkslay:

No es que sea muy experta pero te voy a intentar ayudar :) Respecto a la primera parte:

Dim params As New SqlParameter --> Estás creando una variable de tipo SplParameter

Dim params = New SqlParameter() --> Igual pero es un array

Y para la segunda parte te voy a poner un ejemplo de código,ok?

Esta es la capa de negocios con el procedimiento para insertar:

Private _objDatos As CapaDatos.DataAccess

Public Sub Insertar (ByVal Tabla as String,byVal p1 as Integer, ..p2, p3)


Dim arrParams() As SqlParameter= { _
me._objDatos.CreateParameter("@Tabla", SqlDbType.NVarChar, Tabla), _
me._objDatos.CreateParameter("@p1", SqlDbType.Int, p1),......}

dt = SelectSP(strSelect, arrParams)



End Sub

----------------------------------------------------

Y esta es la capa de acceso a datos, con la función para ejecutar el Sp y otra para crear los parámetros:

Namespace CapaDatos

Public Class DataAccess


Private _conn As SqlConnection

''' <summary>
''' Ejecuta un procedimiento almacenado de acción con parámetros.
''' </summary>
''' <param name="SPName">Nombre del procedimiento almacenado.</param>
''' <param name="Parameters">Array que contiene los parámetros del SP.</param>
Public Function ExecuteSP( _
ByVal SPName As String, _
ByVal Parameters() As SqlParameter) _
As Integer

Dim cmdCommand As New SqlCommand
Dim intFilasAfectadas As Integer

Try
With cmdCommand
.Connection = Me._conn
.CommandType = CommandType.StoredProcedure
.CommandText = SPName
With .Parameters
.AddRange(Parameters)
End With
End With

If Me._conn.State <> ConnectionState.Open Then
Me._conn.Open()
End If

intFilasAfectadas = cmdCommand.ExecuteNonQuery()
Catch ex As Exception
Throw New Exception("No se pudo ejecutar el comando: " & ex.Message)
'Throw New Exception(String.Format("{No se pudo ejecutar el comando. {0}:{1}", ex.InnerException.ToString, ex.Message))
Finally
Me._conn.Close()
End Try

Return intFilasAfectadas

End Function

Public Function CreateParameter( _
ByVal ParamName As String, _
ByVal SqlDbType As System.Data.SqlDbType, _
ByVal Value As Object) _
As System.Data.SqlClient.SqlParameter

Dim p As New System.Data.SqlClient.SqlParameter
With p
.ParameterName = ParamName
.SqlDbType = SqlDbType
.Value = Value
End With

Return p

End Function


A ver si te sirve de ayuda :)

PD:está en vb2005 pero será igual en 2008
  #3 (permalink)  
Antiguo 27/03/2010, 08:06
 
Fecha de Ingreso: noviembre-2006
Mensajes: 9
Antigüedad: 17 años, 5 meses
Puntos: 0
Respuesta: Ayuda crear un array sqlparameter vb net 2008

Cita:
Iniciado por Uialwen Ver Mensaje
Hola Merkslay:

No es que sea muy experta pero te voy a intentar ayudar :) Respecto a la primera parte:

Dim params As New SqlParameter --> Estás creando una variable de tipo SplParameter

Dim params = New SqlParameter() --> Igual pero es un array

Y para la segunda parte te voy a poner un ejemplo de código,ok?

Esta es la capa de negocios con el procedimiento para insertar:

Private _objDatos As CapaDatos.DataAccess

Public Sub Insertar (ByVal Tabla as String,byVal p1 as Integer, ..p2, p3)


Dim arrParams() As SqlParameter= { _
me._objDatos.CreateParameter("@Tabla", SqlDbType.NVarChar, Tabla), _
me._objDatos.CreateParameter("@p1", SqlDbType.Int, p1),......}

dt = SelectSP(strSelect, arrParams)



End Sub

----------------------------------------------------

Y esta es la capa de acceso a datos, con la función para ejecutar el Sp y otra para crear los parámetros:

Namespace CapaDatos

Public Class DataAccess


Private _conn As SqlConnection

''' <summary>
''' Ejecuta un procedimiento almacenado de acción con parámetros.
''' </summary>
''' <param name="SPName">Nombre del procedimiento almacenado.</param>
''' <param name="Parameters">Array que contiene los parámetros del SP.</param>
Public Function ExecuteSP( _
ByVal SPName As String, _
ByVal Parameters() As SqlParameter) _
As Integer

Dim cmdCommand As New SqlCommand
Dim intFilasAfectadas As Integer

Try
With cmdCommand
.Connection = Me._conn
.CommandType = CommandType.StoredProcedure
.CommandText = SPName
With .Parameters
.AddRange(Parameters)
End With
End With

If Me._conn.State <> ConnectionState.Open Then
Me._conn.Open()
End If

intFilasAfectadas = cmdCommand.ExecuteNonQuery()
Catch ex As Exception
Throw New Exception("No se pudo ejecutar el comando: " & ex.Message)
'Throw New Exception(String.Format("{No se pudo ejecutar el comando. {0}:{1}", ex.InnerException.ToString, ex.Message))
Finally
Me._conn.Close()
End Try

Return intFilasAfectadas

End Function

Public Function CreateParameter( _
ByVal ParamName As String, _
ByVal SqlDbType As System.Data.SqlDbType, _
ByVal Value As Object) _
As System.Data.SqlClient.SqlParameter

Dim p As New System.Data.SqlClient.SqlParameter
With p
.ParameterName = ParamName
.SqlDbType = SqlDbType
.Value = Value
End With

Return p

End Function


A ver si te sirve de ayuda :)

PD:está en vb2005 pero será igual en 2008



Hola gracias por la respuesta pero me podrias decir si se puede hacer esto??..

en ves de llenar asii declarando el tipo de variable por variable para cada parametro que contendra el array arrParams()
...
Dim arrParams() As SqlParameter= { _
me._objDatos.CreateParameter("@Tabla", SqlDbType.NVarChar, Tabla), _
me._objDatos.CreateParameter("@p1", SqlDbType.Int, p1),......}


se podria hacer llenarlo de frente sin declarar el tipo de parametro?? asi como pasarlo como una array de tipo string? .. ejemplo..

Dim arrParams() As SqlParameter= {p1,p2,p3,p4,p5,p6,...p10}

lo que quiero en sii es pasar todos los parametros de un array de tipo string a una array de tipo sqlparameter con un for o con un foreach..
algo asi

Dim array() As string= {p1,p2,p3,p4,p5,p6,...p10}
Dim arrParams() As SqlParameter

//sorry por el codigo lo que quiero dara entender es la idea si se puede hacer esto pero sin declarar cada valor sqlparameter del arrayparams()... porque se me hace hace laborioso estar declarando una por una y manejo aveces mas de 30 parametros y eso si me hace perder mucho tiempo .... o necesariamente tengo que declarar una por una =(? porfaa ayudenme.....
for i=0;i<=array().lenghts-1;i++

arraParams(i).value=array(i).value

end for

con un buclee que me llene todos los valores que contiene el array() tipo string al arrayParams() de tipo SqlParameter..... ya sea con un for o foreach..

Espero su grandes respuestas ... a todos muchas gracias
  #4 (permalink)  
Antiguo 29/03/2010, 09:57
 
Fecha de Ingreso: marzo-2010
Mensajes: 3
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Ayuda crear un array sqlparameter vb net 2008

Mmmm creo que ahora te entiendo mejor, pero el objeto hay que instanciarlo y no sé si todos los parámetros son del mismo tipo y que nombres les das en el procedimiento almacenado pero puedes intentar algo así si son del mismo tipo:


Public Sub Grabar()
Dim sarray() As String = {"p1", "p2", "p3", "p4", "p5", "p6", "p10"}
'Dim arrParams() As SqlParameter

conexion = conector.abrirconexion(servidor, baseDatos, seguridadIntegrada)
Dim comandoSQL As New SqlCommand (conexion)

comandoSQL.CommandType = Data.CommandType.StoredProcedure


Dim i As Integer = 0

For Each str As String In sarray

comandoSQL.Parameters.Add(String.Concat("@", "p", i), SqlDbType.NVarChar)
comandoSQL.Parameters(String.Concat("@", "p", i)).Value = str(i)

i += 1
Next

comandoSQL.ExecuteNonQuery()

conexion.Close()
End Sub

Saludos
  #5 (permalink)  
Antiguo 01/04/2010, 15:02
 
Fecha de Ingreso: noviembre-2006
Mensajes: 9
Antigüedad: 17 años, 5 meses
Puntos: 0
Respuesta: Ayuda crear un array sqlparameter vb net 2008

Cita:
Iniciado por Uialwen Ver Mensaje
Mmmm creo que ahora te entiendo mejor, pero el objeto hay que instanciarlo y no sé si todos los parámetros son del mismo tipo y que nombres les das en el procedimiento almacenado pero puedes intentar algo así si son del mismo tipo:


Public Sub Grabar()
Dim sarray() As String = {"p1", "p2", "p3", "p4", "p5", "p6", "p10"}
'Dim arrParams() As SqlParameter

conexion = conector.abrirconexion(servidor, baseDatos, seguridadIntegrada)
Dim comandoSQL As New SqlCommand (conexion)

comandoSQL.CommandType = Data.CommandType.StoredProcedure


Dim i As Integer = 0

For Each str As String In sarray

comandoSQL.Parameters.Add(String.Concat("@", "p", i), SqlDbType.NVarChar)
comandoSQL.Parameters(String.Concat("@", "p", i)).Value = str(i)

i += 1
Next

comandoSQL.ExecuteNonQuery()

conexion.Close()
End Sub

Saludos
siiii lo entendii gracias pero dos preguntas mas para terminar este temaa :

1) el "str" lo as declaro en el mimos feach cierto?
2)necesariamente tengo que darle tipo de variable al parametrooo?????' no podria mandarle slo su valor??

algo como asi :

Public Sub Grabar()
Dim sarray() As String = {"p1", "p2", "p3", "p4", "p5", "p6", "p10"}
'Dim arrParams() As SqlParameter

conexion = conector.abrirconexion(servidor, baseDatos, seguridadIntegrada)
Dim comandoSQL As New SqlCommand (conexion)

comandoSQL.CommandType = Data.CommandType.StoredProcedure


Dim i As Integer = 0

For Each str As String In sarray

comandoSQL.Parameters(String.Concat("@", "p", i)).Value = str(i)

i += 1
Next

comandoSQL.ExecuteNonQuery()

conexion.Close()
End Sub


guardar de frente el value sin declarar esto : " comandoSQL.Parameters.Add(String.Concat("@", "p", i), SqlDbType.NVarChar)
"
ya que mi procedimiento tiene entre variables varchar,integer ???? habria la posibilidad que las mande todas como varchar() y en la misma base de datos me valide o como puedo tratar esoo ?? porfaaa
  #6 (permalink)  
Antiguo 05/04/2010, 10:13
 
Fecha de Ingreso: marzo-2010
Mensajes: 3
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Ayuda crear un array sqlparameter vb net 2008

Buenas Merkslay, espero que hayas tenido buena semana santa

1)Si, "str" lo he declarado en el mismo for each, es una forma cómoda para no tener que poner los límites al bucle, si no que se ejecutará mientras haya elementos en "sarray"

2)Es que si te saltas esta fila " comandoSQL.Parameters.Add(String.Concat("@", "p", i), SqlDbType.NVarChar), entonces no añades el parámetro a la colección.

Y el método Add te obliga a añadir el tipo de dato SqlDbType. Pero tiene también otra opción; en lugar de poner el nombre y el tipo, meterlo ya como un SqlParameter. Es decir, declararte ya un objeto de tipo sqlParameter:


Dim param as new SQLParameter()

Y el new si permite pasarle sólo el nombre del parámetro como string y el valor como objet.

El código quedaría así:

For Each str As String In sarray

Dim param as new SQLParameter(String.Concat("@", "p", i),str(i))

comandoSQL.Parameters.Add(param)

i += 1
Next


Pero todo esto es teoría mía, porque no sé tampoco como se va a comportar con la base de datos,deberías probarloy decirme

Etiquetas: 3capas, function, reutilizable, sqlcommand, sqlparameter, vbnet, capas
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:21.