将OracleParameter.Value转换为Int32

我有一个存储过程调用,如下所示:

using (OracleConnection con = new OracleConnection(ConfigurationManager.AppSettings["Database"])) using (OracleCommand cmd = new OracleCommand("Package.Procedure", con)) { Int32 existsCount; cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("successCount", OracleDbType.Int32, 0, ParameterDirection.InputOutput); cmd.Parameters.Add("BusinessId", OracleDbType.Int64, listRec.BusinessId, ParameterDirection.Input); con.Open(); cmd.ExecuteScalar(); con.Close(); existsCount = Convert.ToInt32(cmd.Parameters["successCount"].Value); return (existsCount); } 

但在这一行:

 existsCount = Convert.ToInt32(cmd.Parameters["successCount"].Value); 

它抛出exception“无法将类型为’Oracle.DataAccess.Types.OracleDecimal’的对象强制转换为’System.IConvertible’。”

有什么想法吗? 谢谢。

关于什么

 existsCount = int.Parse(cmd.Parameters["successCount"].Value.ToString()); 

你也可以尝试:

 Oracle.DataAccess.Types.OracleDecimal d = (Oracle.DataAccess.Types.OracleDecimal)cmd.Parameters["successCount"].Value; if( d.IsNull ) existsCount = 0; else existsCount = d.ToInt32( ); 

它的使用效率更高

 Convert.ToInt32((decimal)(OracleDecimal)(cmd.Parameters["successCount"].Value)) 

我建议您转换为String ,然后将String转换为Integer

 Dim tmpIdSesiónCalificación As String = parametroIdSesiónCalificación.Value.ToString _idSesiónCalificación = Convert.ToInt32(tmpIdSesiónCalificación)