Cita:
Iniciado por Uialwen 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