No puedo ejecutar un procedimiento almacenado

12/01/2004 - 13:42 por Pedro J. | Informe spam
Hola,
Cada vez que intento ejecutar un procedimiento almacenado ( con
executereader o ExecuteNonQuery o ExecuteScalar - que las tres pruebas he
realizado devolviendo sólo parámetros o datos-) SIEMPRE me devuelve el error
'El objeto debe implementar IConvertible.' al ejecutar el procedimiento
desde la página ASP. ¿como caramba puedo solucionar esto?.

Gracias y un saludo

Pedro J.

Preguntas similare

Leer las respuestas

#1 Marino Posadas
20/01/2004 - 21:55 | Informe spam
Hola Pedro

Salvo otras cosas que se me escapan, eso significa que el objeto al que
asignas la llamada a ExecuteXXX() no es el adecuado (pues debe de
implementar esa interfaz). Por ejemplo, si utilizas un DataReader, tendrías
que poner algo así:

DataReader dr = Comando.ExecuteReader()
While dr.Read() {
//Lo que quieras leer
}




Saludos cordiales
Marino Posadas
MVP .NET Framework

www.ElAveFenix.net

"Pedro J." escribió en el mensaje
news:
Hola,
Cada vez que intento ejecutar un procedimiento almacenado ( con
executereader o ExecuteNonQuery o ExecuteScalar - que las tres pruebas he
realizado devolviendo sólo parámetros o datos-) SIEMPRE me devuelve el


error
'El objeto debe implementar IConvertible.' al ejecutar el procedimiento
desde la página ASP. ¿como caramba puedo solucionar esto?.

Gracias y un saludo

Pedro J.


Respuesta Responder a este mensaje
#2 Pedro J.
21/01/2004 - 13:43 | Informe spam
Gracias por la respuesta pero el problema es que no coincidía el tipo de
dato de un parámetro en el programa con el declarado en el SQL.

Un saludo desde el Sur.

Pedro J.

"Marino Posadas" escribió en el mensaje
news:
Hola Pedro

Salvo otras cosas que se me escapan, eso significa que el objeto al que
asignas la llamada a ExecuteXXX() no es el adecuado (pues debe de
implementar esa interfaz). Por ejemplo, si utilizas un DataReader,


tendrías
que poner algo así:

DataReader dr = Comando.ExecuteReader()
While dr.Read() {
//Lo que quieras leer
}




Saludos cordiales
Marino Posadas
MVP .NET Framework

www.ElAveFenix.net

"Pedro J." escribió en el mensaje
news:
> Hola,
> Cada vez que intento ejecutar un procedimiento almacenado ( con
> executereader o ExecuteNonQuery o ExecuteScalar - que las tres pruebas


he
> realizado devolviendo sólo parámetros o datos-) SIEMPRE me devuelve el
error
> 'El objeto debe implementar IConvertible.' al ejecutar el procedimiento
> desde la página ASP. ¿como caramba puedo solucionar esto?.
>
> Gracias y un saludo
>
> Pedro J.
>
>



Respuesta Responder a este mensaje
#3 bardasoft
21/01/2004 - 18:54 | Informe spam
Precisamente el mismo problema tuve, pero recientemente
logré (despues de unos 15 dias de investigación)
hacer 2 funciones para manejar los procedimientos
almacenados desde Código para Access, que no sé si te
sirvan pero de todos modos te los envio, para ver si
te da alguna luz.

1) Crear un procedimiento a través de código.
2) Ejecutar el procedimiento almacenado
3) Convertir el DataReader en un DataSet.

Veras que se pueden crear y trasladar parametros en forma
opcional. Si no deseas que retorne el Dataset, únicamente
elimina del codigo esa parte.

NOTA: Segun mis lecturas, el DataReader es el único objeto
NET que permanece constantemente conectado con la Base de
Datos, por lo que al final de la funcion que ejecuta un
procedimiento, hay que cerrar dicho objeto. Ese es el motivo
por el cual decidí convertir el Resultado a un Dataset.

La conversion a Dataset es posible gracias a los métodos
GetName y GetFieldType del DataReader, que retornan el nombre
de la Columna y el Tipo de Dato que almacena.


Espero te sirvan estas funciones.


Carlos Bardales
El Pais de la Eterna Primavera.
Guatemala.


'-
'INSTRUCCIONES PARA CREACION DE PROCEDIMIENTO ALMACENADO CON CODIGO
'-
' MiProc = Nombre del procedimiento almacenado. (debe ser distinto
' a cualquier otro objeto de la Base de datos.
' Sql = Cadena SELECT que devuelve los registros deseados.
' Where= String con los parámetros deseados: OPCIONAL.
' OJO: ACCESS UTILIZA EL CARACTER ? PARA LOS PARAMETROS.
' Conex = Objeto OLEDBCONECTION, que se utilizará.
'
' ejemplo:

' newProcedure("MiProc","SELECT * FROM CUENTAS",_
"COD_CUENTA=? AND COD_BANCO=?" , _
MiConex as oledbconnection)

' Crea un procedimiento almacenado con el nombre MIPROC,
' con 2 parametros.

'-


'-
'INSTRUCCIONES PARA EJECUCION DE PROCEDIMIENTO ALMACENADO CON CODIGO
'-
DIM MiDataset as dataset
DIM Conex as oledbconnection
DIM aParametros(1) AS STRING

'asignar la conexion y parametros
conex.connectionString = "MI CADENA DE CONEXION"
aParametros(0) = "01-1002040-3" 'el numero de cuenta
aParametros(1) = "BANK-AMERICA" 'el codigo del banco

'Ejecutar el Stored Procedure y devolver un Dataset

MiDataset = GetProcedure("Miproc",conex, aParametros)

IF ISNOTHING(MiDataset) then
messagebox.show("No hay datos para esta consulta")
ENDIF

etc.etc.




'-
' FUNCION QUE CREA UN STORED PROCEDURE MEDIANTE CODIGO (ACCESS)
'-
Public Function NewProcedure(ByVal Nombre As String,
BYVAL conex as oledbconnection, _
ByVal Sql As String,
Optional ByVal Where As String = "") As Boolean

Dim oComando As OleDbCommand
Dim cComando As String
If Conex.State <> ConnectionState.Open Then Conex.Open()
cComando = "CREATE PROC " & Nombre & " AS " & _
Sql & IIf(Len(Where.Trim) > 0, " WHERE " & Where, "")
Try
oComando = New OleDbCommand(cComando, Conex)
oComando.ExecuteNonQuery()
Return True
Catch ex As Exception
MessageBox.Show(ex.Message)
Return False
Finally
conex.close
End Try
End Function


'-
'RETORNA UN DATASET, CON EL PROCEDIMIENTO ALMACENADO
'-
Public Shared Function GetProcedure(ByVal Nombre As String, _
ByVal Conex As OleDbConnection, _
Optional ByVal aDatos As String() = Nothing)
As DataSet
Dim oDatos As OleDbDataReader
Dim oComando As OleDbCommand
Dim oParametro As OleDbParameter
Dim oConex As OleDbConnection
Dim oSet As New DataSet
Dim ofila As DataRow
Dim oTabla As DataTable
Dim nCols As Integer

Try
If Conex.State <> ConnectionState.Open Then Conex.Open()
oComando = New OleDbCommand
oComando.Connection = Conex
oComando.CommandType = CommandType.StoredProcedure
oComando.CommandText = Nombre

If Not IsNothing(aDatos) Then 'si existen parametros
For i As Integer = 0 To aDatos.Length - 1 'crearlos
oParametro = New OleDbParameter
oParametro.ParameterName = "Var" & CStr(i)
oParametro.Value = aDatos(i)
oParametro.Direction = ParameterDirection.Input
oParametro.DbType = DbType.String
oComando.Parameters.Add(oParametro)
Next
End If

Conex.Open()
oDatos = oComando.ExecuteReader

'convertir el dataReader, en un Dataset
oTabla = New DataTable("MySql")
nCols = oDatos.FieldCount
For i As Integer = 0 To nCols - 1
oTabla.Columns.Add(oDatos.GetName(i), oDatos.GetFieldType(i))
Next
oSet.Tables.Add(oTabla)

'rellenar el dataset
While oDatos.Read()
ofila = oSet.Tables(0).NewRow
For K As Integer = 0 To nCols - 1
ofila(K) = oDatos(K)
Next
oSet.Tables(0).Rows.Add(ofila)
End While
Return oSet 'Retornar el resultado.

Catch ex As Exception
MessageBox.Show(ex.Message)
Return Nothing
Finally
oDatos.Close()
Conex.Close()
oDatos = Nothing
oComando = Nothing
oConex = Nothing
oParametro = Nothing
ofila = Nothing
oTabla = Nothing
GC.Collect() 'limpiar colector de basura.
End Try
End Function



"Marino Posadas" wrote in message news:...
Hola Pedro

Salvo otras cosas que se me escapan, eso significa que el objeto al que
asignas la llamada a ExecuteXXX() no es el adecuado (pues debe de
implementar esa interfaz). Por ejemplo, si utilizas un DataReader, tendrías
que poner algo así:

DataReader dr = Comando.ExecuteReader()
While dr.Read() {
//Lo que quieras leer
}




Saludos cordiales
Marino Posadas
MVP .NET Framework

www.ElAveFenix.net

"Pedro J." escribió en el mensaje
news:
> Hola,
> Cada vez que intento ejecutar un procedimiento almacenado ( con
> executereader o ExecuteNonQuery o ExecuteScalar - que las tres pruebas he
> realizado devolviendo sólo parámetros o datos-) SIEMPRE me devuelve el
error
> 'El objeto debe implementar IConvertible.' al ejecutar el procedimiento
> desde la página ASP. ¿como caramba puedo solucionar esto?.
>
> Gracias y un saludo
>
> Pedro J.
>
>
Respuesta Responder a este mensaje
#4 Marino Posadas
26/01/2004 - 00:13 | Informe spam
Hola

Efectivamente, el error es de "casting". Si el objeto pasado implementara
esa interfaz, se podría hacer la conversión automática (como con algunos
tipos).


Saludos,
Marino
www.ElAveFenix.net

"Pedro J." escribió en el mensaje
news:%
Gracias por la respuesta pero el problema es que no coincidía el tipo de
dato de un parámetro en el programa con el declarado en el SQL.

Un saludo desde el Sur.

Pedro J.

"Marino Posadas" escribió en el mensaje
news:
> Hola Pedro
>
> Salvo otras cosas que se me escapan, eso significa que el objeto al que
> asignas la llamada a ExecuteXXX() no es el adecuado (pues debe de
> implementar esa interfaz). Por ejemplo, si utilizas un DataReader,
tendrías
> que poner algo así:
>
> DataReader dr = Comando.ExecuteReader()
> While dr.Read() {
> //Lo que quieras leer
> }
>
>
>
>
> Saludos cordiales
> Marino Posadas
> MVP .NET Framework
>
> www.ElAveFenix.net
>
> "Pedro J." escribió en el mensaje
> news:
> > Hola,
> > Cada vez que intento ejecutar un procedimiento almacenado ( con
> > executereader o ExecuteNonQuery o ExecuteScalar - que las tres pruebas
he
> > realizado devolviendo sólo parámetros o datos-) SIEMPRE me devuelve el
> error
> > 'El objeto debe implementar IConvertible.' al ejecutar el


procedimiento
> > desde la página ASP. ¿como caramba puedo solucionar esto?.
> >
> > Gracias y un saludo
> >
> > Pedro J.
> >
> >
>
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida