{"id":14522,"date":"2025-04-22T22:24:13","date_gmt":"2025-04-22T20:24:13","guid":{"rendered":"https:\/\/www.palentino.es\/blog\/?p=14522"},"modified":"2025-04-22T22:28:35","modified_gmt":"2025-04-22T20:28:35","slug":"conectando-sap-hana-con-net-usando-c","status":"publish","type":"post","link":"https:\/\/www.palentino.es\/blog\/conectando-sap-hana-con-net-usando-c\/","title":{"rendered":"Conectando SAP HANA con .NET usando C#"},"content":{"rendered":"<p>SAP HANA es una base de datos relacional orientada a columnas, altamente optimizada para procesar grandes vol\u00famenes de datos en memoria. En entornos empresariales donde SAP es parte del ecosistema tecnol\u00f3gico, es com\u00fan que se necesite integrar SAP HANA con aplicaciones desarrolladas en .NET, ya sea para consultas, reportes, an\u00e1lisis o integraci\u00f3n de servicios.<\/p>\n<p>En este art\u00edculo, explicaremos paso a paso c\u00f3mo conectar una aplicaci\u00f3n C# con SAP HANA usando el proveedor nativo de SAP: el <strong>SAP HANA .NET Data Provider<\/strong>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-14524 size-full\" src=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2025\/04\/C-hana-conexion.png\" alt=\"\" width=\"1074\" height=\"676\" srcset=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2025\/04\/C-hana-conexion.png 1074w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2025\/04\/C-hana-conexion-300x189.png 300w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2025\/04\/C-hana-conexion-1024x645.png 1024w\" sizes=\"auto, (max-width: 1074px) 100vw, 1074px\" \/><\/p>\n<p><!--more--><\/p>\n<h3>Requisitos previos<\/h3>\n<p>Antes de comenzar con el desarrollo, es importante asegurarse de tener el entorno adecuado. Los elementos necesarios son:<\/p>\n<ol>\n<li>Una instancia de SAP HANA (en la red local, en la nube o en un entorno de desarrollo).<\/li>\n<li>El <strong>SAP HANA Client<\/strong>, que incluye las bibliotecas necesarias para establecer la conexi\u00f3n desde .NET.<\/li>\n<li>Un entorno de desarrollo .NET (por ejemplo, Visual Studio).<\/li>\n<li>Conocimiento b\u00e1sico de C# y de acceso a bases de datos con ADO.NET.<\/li>\n<\/ol>\n<h3>Instalaci\u00f3n del SAP HANA Client<\/h3>\n<p>El <strong>SAP HANA Client<\/strong> puede descargarse desde el portal oficial de desarrolladores de SAP:<\/p>\n<ul>\n<li>Sitio: <a href=\"https:\/\/developers.sap.com\/topics\/hana-clients.html\">https:\/\/developers.sap.com\/topics\/hana-clients.html<\/a><\/li>\n<\/ul>\n<p>Una vez instalado, aseg\u00farate de ubicar el archivo <strong>Sap.Data.Hana.dll<\/strong>, ya que necesitar\u00e1s agregarlo como referencia en tu proyecto .NET.<\/p>\n<h3>Estructura de conexi\u00f3n en C#<\/h3>\n<p>A continuaci\u00f3n, te mostramos un ejemplo de c\u00f3digo para conectarte a SAP HANA, ejecutar una consulta y mostrar los resultados por consola. Este ejemplo puede adaptarse f\u00e1cilmente a aplicaciones de escritorio (WinForms, WPF) o web (ASP.NET).<\/p>\n<pre>\n\n<div class=\"codecolorer-container text mac-classic language-csharp\" style=\"overflow:auto;white-space:nowrap;width:635px;height:300px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/><\/div><\/td><td><div class=\"text codecolorer\">using Sap.Data.Hana;<br \/>\nusing System;<br \/>\n<br \/>\nclass Program<br \/>\n{<br \/>\n&nbsp; &nbsp; static void Main()<br \/>\n&nbsp; &nbsp; {<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; string connectionString = &quot;Server=192.168.1.100:30015;UserID=usuario;Password=tuPassword&quot;;<br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; using (HanaConnection connection = new HanaConnection(connectionString))<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; {<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; connection.Open();<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine(&quot;Conexi\u00f3n exitosa a SAP HANA.&quot;);<br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; string sql = &quot;SELECT ID, NOMBRE FROM CLIENTES&quot;;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; HanaCommand command = new HanaCommand(sql, connection);<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; HanaDataReader reader = command.ExecuteReader();<br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; while (reader.Read())<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int id = reader.GetInt32(0);<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; string nombre = reader.GetString(1);<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine($&quot;ID: {id}, Nombre: {nombre}&quot;);<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; catch (Exception ex)<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine(&quot;Error al conectar o consultar SAP HANA: &quot; + ex.Message);<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; }<br \/>\n&nbsp; &nbsp; }<br \/>\n}<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n\n<\/pre>\n<h3>Explicaci\u00f3n del c\u00f3digo<\/h3>\n<ol>\n<li><strong>Cadena de conexi\u00f3n<\/strong>: Incluye los par\u00e1metros necesarios como el servidor (\n<div class=\"codecolorer-container text mac-classic\" style=\"overflow:auto;white-space:nowrap;width:635px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"text codecolorer\">Server<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>), n\u00famero de puerto (<\/p>\n<div class=\"codecolorer-container text mac-classic\" style=\"overflow:auto;white-space:nowrap;width:635px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"text codecolorer\">30015<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>por defecto), usuario (<\/p>\n<div class=\"codecolorer-container text mac-classic\" style=\"overflow:auto;white-space:nowrap;width:635px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"text codecolorer\">UserID<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>) y contrase\u00f1a (<\/p>\n<div class=\"codecolorer-container text mac-classic\" style=\"overflow:auto;white-space:nowrap;width:635px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"text codecolorer\">Password<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>).<\/li>\n<li><strong>HanaConnection<\/strong>: Clase que representa la conexi\u00f3n al servidor HANA.<\/li>\n<li><strong>HanaCommand<\/strong>: Permite ejecutar comandos SQL sobre la conexi\u00f3n establecida.<\/li>\n<li><strong>HanaDataReader<\/strong>: Utilizado para recorrer los resultados fila por fila de forma eficiente.<\/li>\n<\/ol>\n<h3>Buenas pr\u00e1cticas<\/h3>\n<ul>\n<li>Usa el bloque\n<div class=\"codecolorer-container text mac-classic\" style=\"overflow:auto;white-space:nowrap;width:635px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"text codecolorer\">using<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>para asegurarte de cerrar correctamente la conexi\u00f3n.<\/li>\n<li>Valida la existencia de datos antes de acceder a las columnas del\n<div class=\"codecolorer-container text mac-classic\" style=\"overflow:auto;white-space:nowrap;width:635px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"text codecolorer\">DataReader<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>.<\/li>\n<li>No incluyas contrase\u00f1as directamente en el c\u00f3digo en entornos de producci\u00f3n. Usa mecanismos seguros como archivos de configuraci\u00f3n o secretos cifrados.<\/li>\n<li>Si tu aplicaci\u00f3n accede frecuentemente a HANA, considera usar\n<div class=\"codecolorer-container text mac-classic\" style=\"overflow:auto;white-space:nowrap;width:635px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"text codecolorer\">Connection Pooling<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>(ya activado por defecto) para mejorar el rendimiento.<\/li>\n<\/ul>\n<h3>Conclusi\u00f3n<\/h3>\n<p>La integraci\u00f3n de SAP HANA con aplicaciones .NET es directa y eficiente gracias al proveedor oficial de SAP. Esta integraci\u00f3n permite aprovechar la velocidad de procesamiento en memoria de HANA desde herramientas desarrolladas en C#, tanto para consultas como para integraciones m\u00e1s complejas con otros sistemas.<\/p>\n<p>Ya sea para construir reportes, consumir datos anal\u00edticos o desarrollar soluciones empresariales a medida, el acceso a SAP HANA desde .NET es una herramienta clave para cualquier desarrollador en entornos SAP.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>SAP HANA es una base de datos relacional orientada a columnas, altamente optimizada para procesar grandes vol\u00famenes de datos en memoria. En entornos empresariales donde SAP es parte del ecosistema tecnol\u00f3gico, es com\u00fan que se necesite integrar SAP HANA con aplicaciones desarrolladas en .NET, ya sea para consultas, reportes, an\u00e1lisis o integraci\u00f3n de servicios. En este art\u00edculo, explicaremos paso a paso c\u00f3mo conectar una aplicaci\u00f3n C# con SAP HANA usando el proveedor nativo de SAP: el SAP HANA .NET Data Provider.<\/p>\n","protected":false},"author":1,"featured_media":9989,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1415],"tags":[479],"class_list":["post-14522","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sin-categoria-es","tag-sap"],"_links":{"self":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/14522","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/comments?post=14522"}],"version-history":[{"count":2,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/14522\/revisions"}],"predecessor-version":[{"id":14525,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/14522\/revisions\/14525"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media\/9989"}],"wp:attachment":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media?parent=14522"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/categories?post=14522"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/tags?post=14522"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}