Topic
  • 1 reply
  • Latest Post - ‏2013-05-23T19:19:19Z by krmilligan
Hammad
Hammad
1 Post

Pinned topic A conversion error occurred

‏2013-05-22T07:47:05Z |

Hi,

Following is my code to call an SP which have some parameters and i am trying to call it from .Net (IBM.Data.DB2.iSeries). When i execute it an exception has occurred "A conversion error occurred". I think the problematic parameter is "@DSAIF" which is an Input/Output parameter and contains strings and packed decimal values. Please help me in this. 

Code : 

 

iDB2Connection cn = null;
 
            using (cn = new iDB2Connection())
            {
 
                try
                {
 
                    cn.ConnectionString = "DataSource=MyServer;UserID=testUser;Password=TestPwd;";
                    cn.Open();
 
                    iDB2Command cmLBalEnq = new iDB2Command("USREQABC", cn);
                    cmLBalEnq.CommandType = CommandType.StoredProcedure;
 
                    iDB2Parameter p_EPGM = new iDB2Parameter();
                    p_EPGM.ParameterName = "@EPGM";
                    p_EPGM.Direction = ParameterDirection.Input;
                    p_EPGM.iDB2DbType = iDB2DbType.iDB2VarChar;
                    p_EPGM.Value = "ABC ";
                    cmLBalEnq.Parameters.Add(p_EPGM);
 
                    iDB2Parameter p_DSAIF = new iDB2Parameter();
                    p_DSAIF.ParameterName = "@DSAIF";
                    p_DSAIF.Direction = ParameterDirection.InputOutput;
                    p_DSAIF.iDB2DbType = iDB2DbType.iDB2Char;
                    p_DSAIF.Value = DSAIFFormattedCusDetEnq();
                    cmLBalEnq.Parameters.Add(p_DSAIF);
 
                    iDB2Parameter p_DSAIR = new iDB2Parameter();
                    p_DSAIR.ParameterName = "@DSAIR";
                    p_DSAIR.Direction = ParameterDirection.Output;
                    p_DSAIR.iDB2DbType = iDB2DbType.iDB2VarChar;
                    p_DSAIR.Value = GetFixedLengthString(null, 9999);
                    cmLBalEnq.Parameters.Add(p_DSAIR);
 
                    iDB2Parameter p_BEGIN = new iDB2Parameter();
                    p_BEGIN.ParameterName = "@BEGIN";
                    p_BEGIN.Direction = ParameterDirection.Input;
                    p_BEGIN.iDB2DbType = iDB2DbType.iDB2VarChar;
                    p_BEGIN.Value = "Y";
                    cmLBalEnq.Parameters.Add(p_BEGIN);
 
                    iDB2Parameter p_NOREQ = new iDB2Parameter();
                    p_NOREQ.ParameterName = "@NOREQ";
                    p_NOREQ.Direction = ParameterDirection.Input;
                    p_NOREQ.iDB2DbType = iDB2DbType.iDB2Integer;
                    p_NOREQ.Value = 1;
                    cmLBalEnq.Parameters.Add(p_NOREQ);
 
                    iDB2Parameter p_NORET = new iDB2Parameter();
                    p_NORET.ParameterName = "@NORET";
                    p_NORET.Direction = ParameterDirection.Output;
                    p_NORET.iDB2DbType = iDB2DbType.iDB2Integer;
                    cmLBalEnq.Parameters.Add(p_NORET);
 
                    iDB2Parameter p_ENQLN = new iDB2Parameter();
                    p_ENQLN.ParameterName = "@ENQLN";
                    p_ENQLN.Direction = ParameterDirection.Input;
                    p_ENQLN.iDB2DbType = iDB2DbType.iDB2VarChar;
                    p_ENQLN.Value = GetFixedLengthString(null, 2);
                    cmLBalEnq.Parameters.Add(p_ENQLN);
 
                    iDB2Parameter p_ERCOD = new iDB2Parameter();
                    p_ERCOD.ParameterName = "@ERCOD";
                    p_ERCOD.Direction = ParameterDirection.Output;
                    p_ERCOD.Size = 2;
                    p_ERCOD.iDB2DbType = iDB2DbType.iDB2VarChar;
                    p_ERCOD.Value = GetFixedLengthString(null, 2);
                    cmLBalEnq.Parameters.Add(p_ERCOD);
 
                    iDB2Parameter p_ERPRM = new iDB2Parameter();
                    p_ERPRM.ParameterName = "@ERPRM";
                    p_ERPRM.Direction = ParameterDirection.Output;
                    p_ERPRM.Size = 10;
                    p_ERPRM.iDB2DbType = iDB2DbType.iDB2VarChar;
                    p_ERPRM.Value = GetFixedLengthString(null, 10);
                    cmLBalEnq.Parameters.Add(p_ERPRM);
 
                    iDB2Parameter p_FLEN = new iDB2Parameter();
                    p_FLEN.ParameterName = "@FLEN";
                    p_FLEN.Direction = ParameterDirection.Output;
                    p_FLEN.Size = 10;
                    p_FLEN.iDB2DbType = iDB2DbType.iDB2Integer;
                    //p_FLEN.Value = GetFixedLengthString(null, 10);
                    cmLBalEnq.Parameters.Add(p_FLEN);
 
                    iDB2Parameter p_RLEN = new iDB2Parameter();
                    p_RLEN.ParameterName = "@RLEN";
                    p_RLEN.Direction = ParameterDirection.Output;
                    p_RLEN.Size = 10;
                    p_RLEN.iDB2DbType = iDB2DbType.iDB2Integer;
                    //p_FLEN.Value = GetFixedLengthString(null, 10);
                    cmLBalEnq.Parameters.Add(p_RLEN);
 
                    try
                    {
                        cmLBalEnq.ExecuteNonQuery();
                        string DSAIF = cmLBalEnq.Parameters["@DSAIF"].Value.ToString();
                        string DSAIR = cmLBalEnq.Parameters["@DSAIR"].Value.ToString();
                        string NORET = cmLBalEnq.Parameters["@NORET"].Value.ToString();
                        string ERCOD = cmLBalEnq.Parameters["@ERCOD"].Value.ToString();
                        string ERPRM = cmLBalEnq.Parameters["@ERPRM"].Value.ToString();
                        string rLength = cmLBalEnq.Parameters["@RLEN"].Value.ToString();
                        string fLength = cmLBalEnq.Parameters["@FLEN"].Value.ToString();
                    }
                    catch (Exception ex)
                    {
 
                    }
 
 
 
                }
                catch (Exception ex)
                {
                    string a = ex.ToString();
                }
                finally
                {
                    if (cn != null)
                        cn.Close();
                }
 
            }

 

Regards,

Hammad

  • krmilligan
    krmilligan
    450 Posts

    Re: A conversion error occurred

    ‏2013-05-23T19:19:19Z  

    Hard to say without seeing the stored procedure definition or conversion error message.  The stored procedure design seems questionable if both strings and decimal values are being passed to a procedure parameter

     

    Not sure if it will solve your conversion error,  but the IBM ADO.NET Redbook (http://www.redbooks.ibm.com/redbooks/pdfs/sg246440.pdf) does recommend using CommandType.Text for stored procedure calls to get better performance.