An SDN Controller will support OpenFlow for the control plane of the switch, but some controller's may support protocols for the management plane of the switch. This all depends on the SDN Controller's supported protocols between itself and the underlying network elements (switches/routers).
The control plane defines how packets flow through the network element.
The management plane monitors and configures the network element.
The OpenDaylight controller supports OpenFlow, NETCONF and seems to have an SNMP project as well ( https://wiki.opendaylight.org/view/Project_Proposals:SNMP_Plugin) . The ONOS SDN Controller also has support for OpenFlow and NETCONF as well.
SDxCentral recently released their 2015 SDN Controller survey that does a good job discussing the different controllers and their capabilities: https://www.sdxcentral.com/articles/announcements/sdn-controllers-report-2015-download-available/2015/08/
With NETCONF you can retrieve and configure the underlying network element via the SDN Controller. Specifically you can write an application atop the controller that utilizes a RESTful-like api to do this. It is this ability to write applications that makes the SDN Controller different from the CLI.
NETCONF is based on YANG data models (like SNMP is based on MIBs). I will point out that there are some standard YANG models defined and there are more coming, but similar to SNMP there are vendor-specific models and extensions.
Here is a video blog that walks you through how NETCONF can be used to program a network element via an OpenDaylight SDN Controller: http://brcdcomm.github.io/BVC/jekyll/update/devops/netdev/appdev/2015/03/01/restconf-app-2.html
There is also a video describing YANG at a high level: http://brcdcomm.github.io/BVC/jekyll/update/devops/netdev/appdev/2015/04/11/Yang-For-BVC-RESTCONF-Dev.html