关于ODBC调用存储过程获取return值,该如何处理

关于ODBC调用存储过程获取return值
sql2005存储过程,通过不同的返回值(整型)表示不同的结果。
但是在使用OdbcCommand调用该存储过程时,获取到的返回值始终不对。代码如下:

OdbcCommand cmd = new OdbcCommand("{call CP_CreateUser(?,?,?)}", _OdbcConnection);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@sUserName", OdbcType.VarChar, 50);
cmd.Parameters["@sUserName"].Value = sUser;
cmd.Parameters.Add("@sPwd", OdbcType.VarChar, 50);
cmd.Parameter["@sPwd"].Value = sPwd;
cmd.Parameters.Add("@iRtn", OdbcType.SmallInt);
cmd.Parameters["@iRtn"].Direction = ParameterDirection.ReturnValue;
cmd.ExecuteNonQuery();
执行完毕后,获取返回值是错误的,获取方式如下:
int irst = int.Parse(cmd.Parameters["@iRtn"].Value.ToString());

有人用过类似的方式吗,请问如何获取返回值,增加一个输出参数的方法是可以的,但是有点烦
------解决方案--------------------
将cmd.Parameters.Add("@iRtn", OdbcType.SmallInt); 中 odbcType 改为varchar    我原来调用oracle时遇到过一次,你试试。 
------解决方案--------------------

int irst = Convert.ToInt32(cmd.Parameters["@iRtn"].Value.ToString());

错误成什么样子呢?是报错还是说值不对