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

Error al convertir el valor del parámetro de SqlParameter a Int32

Estas en el tema de Error al convertir el valor del parámetro de SqlParameter a Int32 en el foro de .NET en Foros del Web. Hola a todos. Tengo un problema con mi aplicacion asp.net con c#. Estoy usando 3 capas; todo va bien hasta que llega a la linea ...
  #1 (permalink)  
Antiguo 31/10/2011, 09:44
Avatar de kharen  
Fecha de Ingreso: septiembre-2009
Mensajes: 75
Antigüedad: 14 años, 7 meses
Puntos: 2
Error al convertir el valor del parámetro de SqlParameter a Int32

Hola a todos.

Tengo un problema con mi aplicacion asp.net con c#. Estoy usando 3 capas; todo va bien hasta que llega a la linea de codigo donde se ejecuta el procedimiento almacenado: SqlHelper.ExecuteScalar(poTx, "usp_RegistrarUsuario", par) y me da el error Error al convertir el valor del parámetro de SqlParameter a Int32.

Este es mi codigo:

CAPA ENTIDAD:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ENTIDAD
{
public class UsuarioEntidad
{
private int _IdUsuario;
public int IdUsuario
{
get { return _IdUsuario; }
set { _IdUsuario = value; }
}

private String _NomApe;
public String NomApe
{
get { return _NomApe; }
set { _NomApe = value; }
}

private String _Correo;
public String Correo
{
get { return _Correo; }
set { _Correo = value; }
}

private String _Clave;
public String Clave
{
get { return _Clave; }
set { _Clave = value; }
}

private DateTime _FechaNac;
public DateTime FechaNac
{
get { return _FechaNac; }
set { _FechaNac = value; }
}

private int _IdPais;
public int IdPais
{
get { return _IdPais; }
set { _IdPais = value; }
}

private String _Ciudad;
public String Ciudad
{
get { return _Ciudad; }
set { _Ciudad = value; }
}

private int _Publicidad;
public int Publicidad
{
get { return _Publicidad; }
set { _Publicidad = value; }
}

private String _Sexo;
public String Sexo
{
get { return _Sexo; }
set { _Sexo = value; }
}

private int _TipoUsu;
public int TipoUsu
{
get { return _TipoUsu; }
set { _TipoUsu = value; }
}

private int _Estado;
public int Estado
{
get { return _Estado; }
set { _Estado = value; }
}

///pais

private int _PAI_ISONUM;
public int PAI_ISONUM
{
get { return _PAI_ISONUM; }
set { _PAI_ISONUM = value; }
}

private String _PAI_ISO2;
public String PAI_ISO2
{
get { return _PAI_ISO2; }
set { _PAI_ISO2 = value; }
}

private String _PAI_ISO3;
public String PAI_ISO3
{
get { return _PAI_ISO3; }
set { _PAI_ISO3 = value; }
}

private String _PAI_NOMBRE;
public String PAI_NOMBRE
{
get { return _PAI_NOMBRE; }
set { _PAI_NOMBRE = value; }
}

}
}


CAPA DATOS:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using Microsoft.ApplicationBlocks.Data;
using ENTIDAD;

namespace DATOS
{
public class UsuarioDatos : DataAccess
{
public Int32 RegistrarUsuarios(UsuarioEntidad oEUsuarioEntidad)
{
Int32 liResultado;

//conexion
SqlTransaction poTx;
SqlConnection loCn = new SqlConnection();
loCn.ConnectionString = ConnectionString;

//parametros
SqlParameter[] par = new SqlParameter[11];
par[0] = new SqlParameter("@IdUsuario", System.Data.SqlDbType.Int); par[0].Value = oEUsuarioEntidad.IdUsuario;
par[1] = new SqlParameter("@NomApe", System.Data.SqlDbType.VarChar); par[1].Value = oEUsuarioEntidad.NomApe;
par[2] = new SqlParameter("@Correo", System.Data.SqlDbType.VarChar); par[2].Value = oEUsuarioEntidad.Correo;
par[3] = new SqlParameter("@Clave", System.Data.SqlDbType.VarChar); par[3].Value = oEUsuarioEntidad.Clave;
par[4] = new SqlParameter("@FechaNac", System.Data.SqlDbType.DateTime); par[4].Value = oEUsuarioEntidad.FechaNac;
par[5] = new SqlParameter("@IdPais", System.Data.SqlDbType.Int); par[5].Value = oEUsuarioEntidad.IdPais;
par[6] = new SqlParameter("@Ciudad", System.Data.SqlDbType.VarChar); par[6].Value = oEUsuarioEntidad.Ciudad;
par[7] = new SqlParameter("@Publicidad", System.Data.SqlDbType.Int); par[7].Value = oEUsuarioEntidad.Publicidad;
par[8] = new SqlParameter("@Sexo", System.Data.SqlDbType.Char); par[8].Value = oEUsuarioEntidad.Sexo;
par[9] = new SqlParameter("@TipoUsu", System.Data.SqlDbType.Int); par[9].Value = oEUsuarioEntidad.TipoUsu;
par[10] = new SqlParameter("@Estado", System.Data.SqlDbType.Int); par[10].Value = oEUsuarioEntidad.Estado;

loCn.Open();
poTx = loCn.BeginTransaction();
try
{
liResultado = Convert.ToInt32(SqlHelper.ExecuteScalar(poTx, "usp_RegistrarUsuario", par));
poTx.Commit();
}
catch (Exception e)
{
liResultado = -1;
poTx.Rollback();
throw e;
}
finally
{

}
return liResultado;
}
}
}



CAPA NEGOCIOS:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DATOS;
using ENTIDAD;

namespace NEGOCIO
{
public class UsuarioBusiness
{
public Int32 RegistrarUsuario(UsuarioEntidad oEUsuarioEntidad)
{
UsuarioDatos data = new UsuarioDatos();
data.OpenConnection();
try
{
return data.RegistrarUsuarios(oEUsuarioEntidad);
}
catch (Exception ex)
{
throw ex;
}
finally
{
data.CloseConnection();
}
}

}
}


MI APLICACION WEB:


protected void btnRegister_Click(object sender, ImageClickEventArgs e)
{
UsuarioEntidad oEUsuarioEntidad = new UsuarioEntidad();
UsuarioBusiness oBUsuarioBusiness = new UsuarioBusiness();
string script = "";

try
{

oEUsuarioEntidad.IdUsuario = 0;
oEUsuarioEntidad.NomApe = txtNomApe.Text;
oEUsuarioEntidad.Correo = txtCorreo.Text;
oEUsuarioEntidad.Clave = txtClave.Text;
oEUsuarioEntidad.FechaNac = Convert.ToDateTime(txtDia.Text + "/" + txtMes.Text + "/" + txtAnio.Text);
oEUsuarioEntidad.IdPais = Convert.ToInt32(ddlPais.SelectedValue);
oEUsuarioEntidad.Ciudad = txtCiudad.Text;
if (ChkBxSI.Checked == true)
oEUsuarioEntidad.Publicidad = 1;//SI
else
oEUsuarioEntidad.Publicidad = 0;//NO
oEUsuarioEntidad.Sexo = ddlSexo.SelectedValue.ToString();
oEUsuarioEntidad.TipoUsu = 2; //inscrito
oEUsuarioEntidad.Estado = 1;//activado
oBUsuarioBusiness.RegistrarUsuario(oEUsuarioEntida d);
script = "<script language='JavaScript'>window.opener.location = window.opener.location; window.close();</script>";
ClientScript.RegisterStartupScript(typeof(Page), "ActualizarUsuario", script);

}




MI PROCEDIMIENTO ALMACENADO:



IF EXISTS(SELECT * FROM sys.objects WHERE type = 'P' AND name = 'usp_RegistrarUsuario')
DROP PROCEDURE usp_RegistrarUsuario
GO

CREATE PROCEDURE dbo.usp_RegistrarUsuario
@IdUsuario INT,
@NomApe VARCHAR(300),
@Correo VARCHAR(300),
@Clave VARCHAR(50),
@FechaNac DATETIME,
@IdPais INT,
@Ciudad VARCHAR(300),
@Publicidad INT,
@Sexo CHAR(1),
@TipoUsu INT,
@Estado INT
AS
IF EXISTS(SELECT IdUsuario FROM dbo.Usuario WHERE IdUsuario=@IdUsuario)
BEGIN
UPDATE [dbo].Usuario
SET
NomApe = @NomApe,
Correo = @Correo,
Clave = @Clave,
FechaNac = @FechaNac,
IdPais = @IdPais,
Ciudad = @Ciudad,
Publicidad = @Publicidad,
Sexo = @Sexo,
TipoUsu = @TipoUsu,
Estado = @Estado
WHERE
IdUsuario = @IdUsuario
END
ELSE
BEGIN

INSERT INTO dbo.Usuario
(
NomApe,
Correo,
Clave,
FechaNac,
IdPais,
Ciudad,
Publicidad,
Sexo,
TipoUsu,
Estado
)
VALUES
(
@NomApe,
@Correo,
@Clave,
@FechaNac,
@IdPais,
@Ciudad,
@Publicidad,
@Sexo,
@TipoUsu,
@Estado
)
END
GO


Como dije, todo va bien hasta que llega finalmente a la linea de codigo:

liResultado = Convert.ToInt32(SqlHelper.ExecuteScalar(poTx, "usp_RegistrarUsuario", par));

Me parece extraño ya que ese mismo codigo he usado para hacer otra insercion en otro proyecto, funcionaba bien...

ayudenme porfavor

Última edición por kharen; 31/10/2011 a las 09:51
  #2 (permalink)  
Antiguo 31/10/2011, 09:54
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 10 meses
Puntos: 267
Respuesta: Error al convertir el valor del parámetro de SqlParameter a Int32

Hola kharen!. En esta linea :
Código C:
Ver original
  1. liResultado = Convert.ToInt32(SqlHelper.ExecuteScalar(poTx, "usp_RegistrarUsuario", par));
Que valor te devuelve el procedure usp_RegistrarUsuario? Asegurate de saber que valor devuelve, porque aparentemente devuelve una cadena con letras y "Forzosamente" lo conviertes a int32.
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #3 (permalink)  
Antiguo 31/10/2011, 09:56
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 10 meses
Puntos: 267
Respuesta: Error al convertir el valor del parámetro de SqlParameter a Int32

Por cierto kharen cuando usas el ExecuteScalar de SQLHelper. al final tienes que colocarle el ToString() así :
Código C:
Ver original
  1. liResultado = Convert.ToInt32(SqlHelper.ExecuteScalar(poTx, "usp_RegistrarUsuario", par).ToString());
Verifica que no sea por eso y nos cuentas. Saludos!.
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #4 (permalink)  
Antiguo 31/10/2011, 10:31
Avatar de kharen  
Fecha de Ingreso: septiembre-2009
Mensajes: 75
Antigüedad: 14 años, 7 meses
Puntos: 2
Respuesta: Error al convertir el valor del parámetro de SqlParameter a Int32

Hola Aquaventus

El procedimiento almacenado devuelve un mensaje:

(1 row(s) affected)

osea una cantidad de filas afectadas, es decir un escalar creo..


Y acabo de hacer la prueba de poner el toString() a la linea de codigo que dijiste, pero sigue saliendo el mismo error..

liResultado = Convert.ToInt32(SqlHelper.ExecuteScalar(poTx, "usp_RegistrarUsuario", par).ToString());

  #5 (permalink)  
Antiguo 31/10/2011, 10:34
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 10 meses
Puntos: 267
Respuesta: Error al convertir el valor del parámetro de SqlParameter a Int32

El Scalar solo te devuelve el resultado como Cadena. Estas tratando de convertir "1 row(s) affected" a Int32 lo cual es incorrecto porque posee caracteres de letras, Que es lo que deseas hacer con el resultado?
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #6 (permalink)  
Antiguo 31/10/2011, 10:53
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 10 meses
Puntos: 267
Respuesta: Error al convertir el valor del parámetro de SqlParameter a Int32

Talvez lo que quieres hacer es el ExecuteNonquery.
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #7 (permalink)  
Antiguo 31/10/2011, 10:56
Avatar de kharen  
Fecha de Ingreso: septiembre-2009
Mensajes: 75
Antigüedad: 14 años, 7 meses
Puntos: 2
Respuesta: Error al convertir el valor del parámetro de SqlParameter a Int32

en realidad el procedure no devuelve un mensaje como texto, sino que ese mensaje el mismo SQL server lo devuelve. Es una insercion.
  #8 (permalink)  
Antiguo 31/10/2011, 10:59
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 10 meses
Puntos: 267
Respuesta: Error al convertir el valor del parámetro de SqlParameter a Int32

El ExecuteNonquery devuelve 0 o -1, te paso este link para que tengas una información Cuando Usar ExecuteNonquery y ExecuteScalar. Saludos!.
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #9 (permalink)  
Antiguo 31/10/2011, 11:00
Avatar de kharen  
Fecha de Ingreso: septiembre-2009
Mensajes: 75
Antigüedad: 14 años, 7 meses
Puntos: 2
Respuesta: Error al convertir el valor del parámetro de SqlParameter a Int32

Quiero insertar filas a un tabla

estoy usando el sqlhelper:


using System;
using System.Data;
using System.Data.SqlClient;
using System.Xml;

namespace Microsoft.ApplicationBlocks.Data
{
public sealed class SqlHelper
{
public static DataSet ExecuteDataset(SqlConnection connection, CommandType commandType, string commandText);
public static DataSet ExecuteDataset(SqlConnection connection, string spName, params object[] parameterValues);
public static DataSet ExecuteDataset(SqlTransaction transaction, CommandType commandType, string commandText);
public static DataSet ExecuteDataset(SqlTransaction transaction, string spName, params object[] parameterValues);
public static DataSet ExecuteDataset(string connectionString, CommandType commandType, string commandText);
public static DataSet ExecuteDataset(string connectionString, string spName, params object[] parameterValues);
public static DataSet ExecuteDataset(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters);
public static DataSet ExecuteDataset(SqlTransaction transaction, CommandType commandType, string commandText, params SqlParameter[] commandParameters);
public static DataSet ExecuteDataset(string connectionString, CommandType commandType, string commandText, params SqlParameter[] commandParameters);
public static DataTable ExecuteDataTable(SqlConnection connection, CommandType commandType, string commandText);
public static DataTable ExecuteDataTable(SqlConnection connection, string spName, params object[] parameterValues);
public static DataTable ExecuteDataTable(SqlTransaction transaction, CommandType commandType, string commandText);
public static DataTable ExecuteDataTable(SqlTransaction transaction, string spName, params object[] parameterValues);
public static DataTable ExecuteDataTable(string connectionString, CommandType commandType, string commandText);
public static DataTable ExecuteDataTable(string connectionString, string spName, params object[] parameterValues);
public static DataTable ExecuteDataTable(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters);
public static DataTable ExecuteDataTable(SqlTransaction transaction, CommandType commandType, string commandText, params SqlParameter[] commandParameters);
public static DataTable ExecuteDataTable(string connectionString, CommandType commandType, string commandText, params SqlParameter[] commandParameters);
public static int ExecuteNonQuery(SqlConnection connection, CommandType commandType, string commandText);
public static int ExecuteNonQuery(SqlConnection connection, string spName, params object[] parameterValues);
public static int ExecuteNonQuery(SqlTransaction transaction, CommandType commandType, string commandText);
public static int ExecuteNonQuery(SqlTransaction transaction, string spName, params object[] parameterValues);
public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText);
public static int ExecuteNonQuery(string connectionString, string spName, params object[] parameterValues);
public static int ExecuteNonQuery(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters);
public static int ExecuteNonQuery(SqlTransaction transaction, CommandType commandType, string commandText, params SqlParameter[] commandParameters);
public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText, params SqlParameter[] commandParameters);
public static SqlDataReader ExecuteReader(SqlConnection connection, CommandType commandType, string commandText);
public static SqlDataReader ExecuteReader(SqlConnection connection, string spName, params object[] parameterValues);
public static SqlDataReader ExecuteReader(SqlTransaction transaction, CommandType commandType, string commandText);
public static SqlDataReader ExecuteReader(SqlTransaction transaction, string spName, params object[] parameterValues);
public static SqlDataReader ExecuteReader(string connectionString, CommandType commandType, string commandText);
public static SqlDataReader ExecuteReader(string connectionString, string spName, params object[] parameterValues);
public static SqlDataReader ExecuteReader(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters);
public static SqlDataReader ExecuteReader(SqlTransaction transaction, CommandType commandType, string commandText, params SqlParameter[] commandParameters);
public static SqlDataReader ExecuteReader(string connectionString, CommandType commandType, string commandText, params SqlParameter[] commandParameters);
public static object ExecuteScalar(SqlConnection connection, CommandType commandType, string commandText);
public static object ExecuteScalar(SqlConnection connection, string spName, params object[] parameterValues);
public static object ExecuteScalar(SqlTransaction transaction, CommandType commandType, string commandText);
public static object ExecuteScalar(SqlTransaction transaction, string spName, params object[] parameterValues);
public static object ExecuteScalar(string connectionString, CommandType commandType, string commandText);
public static object ExecuteScalar(string connectionString, string spName, params object[] parameterValues);
public static object ExecuteScalar(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters);
public static object ExecuteScalar(SqlTransaction transaction, CommandType commandType, string commandText, params SqlParameter[] commandParameters);
public static object ExecuteScalar(string connectionString, CommandType commandType, string commandText, params SqlParameter[] commandParameters);
public static XmlReader ExecuteXmlReader(SqlConnection connection, CommandType commandType, string commandText);
public static XmlReader ExecuteXmlReader(SqlConnection connection, string spName, params object[] parameterValues);
public static XmlReader ExecuteXmlReader(SqlTransaction transaction, CommandType commandType, string commandText);
public static XmlReader ExecuteXmlReader(SqlTransaction transaction, string spName, params object[] parameterValues);
public static XmlReader ExecuteXmlReader(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters);
public static XmlReader ExecuteXmlReader(SqlTransaction transaction, CommandType commandType, string commandText, params SqlParameter[] commandParameters);
}
}
  #10 (permalink)  
Antiguo 31/10/2011, 11:07
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 10 meses
Puntos: 267
Respuesta: Error al convertir el valor del parámetro de SqlParameter a Int32

Cita:
Iniciado por Aquaventus Ver Mensaje
El ExecuteNonquery devuelve 0 o -1, te paso este link para que tengas una información Cuando Usar ExecuteNonquery y ExecuteScalar. Saludos!.
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #11 (permalink)  
Antiguo 31/10/2011, 11:12
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 10 meses
Puntos: 267
Respuesta: Error al convertir el valor del parámetro de SqlParameter a Int32

Este otro link sobre SQLHelper : Usando SQLHelper para que sepas cual usar en determinado momento
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #12 (permalink)  
Antiguo 31/10/2011, 11:20
Avatar de kharen  
Fecha de Ingreso: septiembre-2009
Mensajes: 75
Antigüedad: 14 años, 7 meses
Puntos: 2
Respuesta: Error al convertir el valor del parámetro de SqlParameter a Int32

Cita:
Iniciado por Aquaventus Ver Mensaje
Este otro link sobre SQLHelper : Usando SQLHelper para que sepas cual usar en determinado momento
Ok gracias por esos links y por tu ayuda, Aquaventus.
Necesitaba definir cual usar

Etiquetas: sql, sqlparameter, aplicaciones
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 03:53.