none
LA OPERACIÓN ARITMÉTICA HA PROVOCADO UN DESBORDAMIENTO RRS feed

  • Pregunta

  • Saludos, Tengo un problema al intentar obtener datos de la base de datos con procedimiento almacenado, el motor de base de datos que uso es MySql. En breve dejo el codigo de C# y la excepcion:

    Codigo:

    OdbcConnection cn = new OdbcConnection(ConfigurationManager.ConnectionStrings["dsnname"].ConnectionString);
    cn.Open();
    OdbcDataAdapter da = new OdbcDataAdapter("call SP_SelectComputadoras(?)", cn);                  da.SelectCommand.Parameters.AddWithValue("PEstatus", "2");
    DataTable dtPC = new DataTable();
    da.Fill(dtPC);
    


    Excepción:

    Mensaje:

    LA OPERACIÓN ARITMÉTICA HA PROVOCADO UN DESBORDAMIENTO

    StackTrace:

    EN SYSTEM.DATA.ODBC.ODBCDATAREADER.GETSQLTYPE(INT32 I)
       EN SYSTEM.DATA.ODBC.ODBCDATAREADER.GETFIELDTYPE(INT32 I)
       EN SYSTEM.DATA.PROVIDERBASE.SCHEMAMAPPING.SETUPSCHEMAWITHOUTKEYINFO(MISSINGMAPPINGACTION MAPPINGACTION, MISSINGSCHEMAACTION SCHEMAACTION, BOOLEAN GETTINGDATA, DATACOLUMN PARENTCHAPTERCOLUMN, OBJECT CHAPTERVALUE)
       EN SYSTEM.DATA.PROVIDERBASE.SCHEMAMAPPING..CTOR(DATAADAPTER ADAPTER, DATASET DATASET, DATATABLE DATATABLE, DATAREADERCONTAINER DATAREADER, BOOLEAN KEYINFO, SCHEMATYPE SCHEMATYPE, STRING SOURCETABLENAME, BOOLEAN GETTINGDATA, DATACOLUMN PARENTCHAPTERCOLUMN, OBJECT PARENTCHAPTERVALUE)
       EN SYSTEM.DATA.COMMON.DATAADAPTER.FILLMAPPINGINTERNAL(DATASET DATASET, DATATABLE DATATABLE, STRING SRCTABLE, DATAREADERCONTAINER DATAREADER, INT32 SCHEMACOUNT, DATACOLUMN PARENTCHAPTERCOLUMN, OBJECT PARENTCHAPTERVALUE)
       EN SYSTEM.DATA.COMMON.DATAADAPTER.FILLMAPPING(DATASET DATASET, DATATABLE DATATABLE, STRING SRCTABLE, DATAREADERCONTAINER DATAREADER, INT32 SCHEMACOUNT, DATACOLUMN PARENTCHAPTERCOLUMN, OBJECT PARENTCHAPTERVALUE)
       EN SYSTEM.DATA.COMMON.DATAADAPTER.FILLFROMREADER(DATASET DATASET, DATATABLE DATATABLE, STRING SRCTABLE, DATAREADERCONTAINER DATAREADER, INT32 STARTRECORD, INT32 MAXRECORDS, DATACOLUMN PARENTCHAPTERCOLUMN, OBJECT PARENTCHAPTERVALUE)
       EN SYSTEM.DATA.COMMON.DATAADAPTER.FILL(DATATABLE[] DATATABLES, IDATAREADER DATAREADER, INT32 STARTRECORD, INT32 MAXRECORDS)
       EN SYSTEM.DATA.COMMON.DBDATAADAPTER.FILLINTERNAL(DATASET DATASET, DATATABLE[] DATATABLES, INT32 STARTRECORD, INT32 MAXRECORDS, STRING SRCTABLE, IDBCOMMAND COMMAND, COMMANDBEHAVIOR BEHAVIOR)
       EN SYSTEM.DATA.COMMON.DBDATAADAPTER.FILL(DATATABLE[] DATATABLES, INT32 STARTRECORD, INT32 MAXRECORDS, IDBCOMMAND COMMAND, COMMANDBEHAVIOR BEHAVIOR)
       EN SYSTEM.DATA.COMMON.DBDATAADAPTER.FILL(DATATABLE DATATABLE)
       EN ACTUALIZACIONSIAFIM.WEBFORMS.PARAMETROS.MAPEARRED() EN C:\USERS\USUARIO\DESKTOP\ACTUALIZACIONSIAFIM\ACTUALIZACIONSIAFIM\WEBFORMS\PARAMETROS.ASPX.CS:LÍNEA 149

    HResult: 

    -2146233066

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

    Espero que me puedan ayudar, es urgente!!


    Handel Santana

    jueves, 24 de enero de 2019 20:59

Todas las respuestas

  • Hola Handelsr:

    He realizado tu código con una conexión odbc, pero contra sql server.

    create procedure SP_SelectComputadoras (@PEstatus int)
    as
    return select 2*@PEstatus as col1, 3*@PEstatus as col2

    El sp, es como los de mysql salvo que por defecto los parámetros son IN, no llevan delimitadores, y se ejecutan con exec en vez de call.

    try
                {
                    OdbcConnection cn = new OdbcConnection("Driver={SQL Server};Server=ESQUINERO;Database=ejUno;");
                    cn.Open();
                    OdbcDataAdapter da = new OdbcDataAdapter("EXEC sp_select ?", cn);
                    da.SelectCommand.Parameters.AddWithValue("@PEstatus", 2);
                    DataTable dtPC = new DataTable();
                    da.Fill(dtPC);
                }
                catch (OdbcException e){
                    MessageBox.Show(e.Message); 
                }

    Me he conectado con el ODBCConnection, con  la cadena de conexión a mi servidor SQL Server, pero bajo odbc.

    Y esto es funcional.

    Si observas, y dado que no has expuesto tu código del procedure, el mismo, esta esperando recibir un varchar?

    Otra pregunta, es si ¿has lanzado el código del procedure con ese parametro directamente desde el workBench de mysql? , o el gestor que utilices, y es funcional?

    jueves, 24 de enero de 2019 21:35
  • Hola:

    1- Como parametro si espera un varchar

    2- Si, lo probé directamente desde el motor de base de datos y es funcional. Por eso no expuse el codigo del procedure. Eso me hace pensar que tiene que ver de alguna manera con el Odbc.

    Lo mas extraño es que ademas de mi PC, el sistema esta instalado es dos PCs mas y el error solo da en una de ellas.


    Handel Santana


    • Editado Handelsr viernes, 25 de enero de 2019 13:54
    viernes, 25 de enero de 2019 13:53
  • Hola

    El varchar es anecdotico. Entonces el problema deberia radicar en el controlador? Otra opcion puede tener algo que ver con configuraciones de separadores decimales o similares?  Dado que es un desbordamiento. Como no pusiste el codigo del procexure no creo que se pueda aportar mucho mas. :)

    viernes, 25 de enero de 2019 15:50
  • Este es el codigo del procedure:

    select c.*, (select l.Proceso from siafimactualizacion.tbllog l where l.DirMAC=c.DirMac

    and CodSistema=(select sistema from siafimactualizacion.tblparametros)

    ORDER BY l.NoEvento desc limit 1) Actualizado,

    (select s.NombreSistema from siafimactualizacion.tblsistemas s

    inner join siafimactualizacion.tblparametros p on p.Sistema=s.Codigo) NombreSistema,

    (select count(*) from siafimactualizacion.tblmensajeslog where Leido=0

    and Mensaje!='Actualizame' and PCOrigenMAC=c.DirMAC) CantMensajes, 0 'Marcar'

    from siafimactualizacion.tblcomputadoras c where PEstatus=2 or c.Estatus=PEstatus

    order by c.Estatus desc;

    En el codigo C# cambie las librerias del ODBC por las de MySql lo probe y funciono correctamente, Este es el codigo editado:

    MySqlConnection cn = new MySqlConnection("Server=10.0.0.9;Database=bd;Uid=root;Pwd=contraseña;");
                        cn.Open();
                        MySqlDataAdapter da = new MySqlDataAdapter("SP_SelectComputadoras", cn);
                        da.SelectCommand.CommandType = CommandType.StoredProcedure;
                        da.SelectCommand.Parameters.AddWithValue("@PEstatus", "2");
                        DataTable dtPC = new DataTable();
                        da.Fill(dtPC);

    El problema es que eso lo hice para probar ya que no puedo dejarlo así, las instituciones que usan ese sistema usan también otro sistema y tienen MySql Server instalado con contraseñas diferentes.

    Algo que note es que cuando ocurre un evento que ejecuta otro procedure este error no aparece.


    Handel Santana


    • Editado Handelsr viernes, 25 de enero de 2019 16:54 Agregar informacion
    viernes, 25 de enero de 2019 16:50