It's not clear how many values you're expecting - for a single value, ExecuteNonQuery will do
1) Im not sure you need to fanangle with the connection state as such
2) it doesnt look like you've defined an output parameter
3) manually closing a connection is so passe - using blocks should be applied instead .. so maybe
string i = "";
SQLHelper conn = new SQLHelper();
using (OracleConnection connection = new OracleConnection(conn.GetConnectionString(dbname)))
using (OracleCommand command = new OracleCommand("XYZ", connection))
{
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("val", OracleDbType.Varchar2, 120);
command.Parameters["val"].Direction = ParameterDirection.Output;
connection.Open();
command.ExecuteNonQuery();
i = command.Parameters["val"].Value.ToString();
}