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

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
    378 Posts
    ACCEPTED ANSWER

    Re: A conversion error occurred

    ‏2013-05-23T19:19:19Z  in response to Hammad

    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.