SAP MaxDB é um banco de dados estratégico criado para rodar em todas as soluções SAP e substituir os bancos de dados Oracle, IBM DB2 e MSSQL Server tornando as soluções SAP mais acessíveis em termos de custo para clientes de grande e médio porte. O SAP MaxDB foi construído como uma solução open source baseado em MySQL sob a licença GNU GPL, as versão anteriores do MaxDB ainda são mantidas pela comunidade open source mas a SAP não contribui mais com estas versões.
Ao longo dos últimos anos, a tecnologia SAP MaxDB continuou a evoluir com investimentos muito significativos em inovações e essas inovações não são em código aberto. Assim o mais recente produto SAP MaxDB não é open source, entretanto ele é gratuito em sua versão comunitária para uso com aplicações não SAP e possui licença comercial para uso com aplicações SAP.
Com 40 anos de inovação atuando em mais de 130 países e com mais de 100 mil clientes que utilizam soluções SAP, o SAP MaxDB ainda é um banco de dados jovem mas conta com mais de 6.500 clientes em 15.000 instalações mais soluções que utilizam liveCache e Content Server.
SAP MaxDB: http://maxdb.sap.com/
SAP MaxDB e C#
A SAP disponibiliza provedores para utilizar o MaxDB com as linguagens de programação .NET utilizando os sistemas operacionais Unix, Linux e Windows, possibilitando integrar soluções Enterprise SAP que utilizam o banco de dados MaxDB com aplicações escritas em C# ou permite que aplicações C# utilizem o SAP MaxDB gratuitamente também em soluções que não possuem o intuito de integrar dados com os sistemas SAP.
SAP ADO.NET: Interface ADO.NET
Para utilizar este walkthrough completo integrando uma solução C# com a linguagem de programação ABAP, você precisa instalar vários software entres eles o NetWeaver Application Server ABAP no qual já possui uma instalação completa do ambiente de desenvolvimento SAP com uma instancia do banco de dados MaxDB, caso queira utilizar somente o lado C# você pode baixar o SAP MaxDB diretamente da SAP Store:
NetWeaver Application Server ABAP: Mini SAP
Download SAP MaxDB sistemas não SAP: SAP Store
SAP MaxDB SQL Studio: Desenvolvimento Aberto walkthrough
MaxDB Data Provider ADO.NET e MONO
O provedor ADO.NET for MaxDB RDBMS foi desenvolvido pelo projeto MONO sob a licença GNU para as versões open Source do SAP MaxDB, caso queira utilizar provedores das versões disponibilizadas pela SAP, estas já acompanham a instalação do MaxDB.
Download: http://sourceforge.net/projects/maxdbprovider/
Projeto MaxDB Mono: http://www.mono-project.com/archived/maxdb/
Conectando ao MaxDB em instancia SAP com C#
1 – Caso utilize este tutorial com o NetWeaver primeiro tenha certeza que servidor de aplicação e a instancia SAP do banco de dados está rodando, caso utilize apenas o MaxDb e C# ignore este passo:
2 – Abra o SQL Studio utilizando o servidor MaxDB e o banco de dados NSP ou seu próprio banco de dados caso não utilize o sistema SAP:
3 – Crie uma tabela Z que significa uma tabela não SAP Standard que não será transparente no conceito do dicionário de dados do sistemas SAP para isto utilize o script logo abaixo, não se assuste para desenvolvedores não SAP isto é apenas uma tabela comum do banco de dados:
4 – Após efetuar o download do provedor ADO.NET para MaxDB clique com o botão direito do mouse, desbloqueie o arquivo baixado, pois o arquivo foi compilado no Linux, caso contrario o Windows Smart Screen tentara bloquear o arquivo. Clique em instalar:
5 – Crie um projeto Windows Forms e disponha na tela um Label, um DataGridView e um Button e alinhe os componentes como na figura abaixo:
6 – Compile o programa e clique em conectar para se conectar a instancia SAP NSP:
7 – Para utilizar o ABAP para ler ou gravar dados nesta mesma tabela não transparente utilizando uma Stored Procedure no MaxDB através de códigos Native SQL, utilize o link abaixo:
Programa SAP – ABAP Native SQL: MaxDB Stored Procedure parâmetros IN e OUT
Caso conecte em um banco de dados MaxDB utilizando soluções SAP tenha em mente que você deve respeitar o conceito de dados dos sistemas SAP e verificar os termos de garantia de cada produto SAP, visto que este método ao contrario do RFC ignora a camada de banco de dados SAP e o dicionário de dados ABAP.
Como você pode verificar na imagem acima no ambiente ABAP o valor flutuante não vem formatado por padrão como estão acostumados os desenvolvedores SAP que utilizam instruções Open SQL e o dicionário ABAP no entanto você pode utilizar campos criados no dicionário apenas para a manipulação do valor de saída da Stored Procedure neste caso você deve alinhar os tipos de dados entre as aplicações C# e aplicações ABAP.
Exemplo:
Neste exemplo utilizamos a linguagem de programação C# para se conectar ao banco de dados SAP MaxDB em uma instancia do banco de dados do NetWeaver e integrar uma tabela não transparente que pode ser manipulada tanto do lado C# como dentro do sistema SAP utilizando Native SQL.
SQL – SAP MaxDB
-- Cria tabela no schema SAPNSP CREATE TABLE SAPNSP.ZFUNCIONARIO ( ID_FUNCIONARIO INT, NOME VARCHAR (30), SOBRENOME VARCHAR(70), CARGO VARCHAR(30), SALARIO DECIMAL(9,2) ) -- Insere dados na tabela Insert into SAPNSP.ZFUNCIONARIO values (1,'Steve','Gates','Programador',2550.56) Insert into SAPNSP.ZFUNCIONARIO values (2,'Bill','Jobs','Diretor',5143.71)
C#
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using MaxDB.Data; // SAP MaxDB Data Provider for MONO namespace WindowsFormsApplication1 { public partial class FormMaxDB : Form { // Declara objetos private static MaxDBConnection connMaxDB; // MaxDB Data Server Provider for MONO private DataTable dataTable; string sql; // Conexão MaxDB void conexaoMaxDB(string Server, string Database, string Username, string Password) { try { // String de Conexao string connectionString = // Servidor "Server=" + Server + // Banco de dados ";Database=" + Database + // Usuario ";User ID=" + Username + // Senha ";Password=" + Password; //Conecta ao datasource usando a conexão SAP MaxDB connMaxDB = new MaxDBConnection(connectionString); //Abre a conexão com o banco de dados connMaxDB.Open(); } // Retorna erro catch (Exception ex) { // Mostra menssagem de erro MessageBox.Show(ex.ToString()); } } // Retorna um set de dados public DataTable retornaTabela(string sql) { FormMaxDB acesso = new FormMaxDB(); // SAP MaxDB requer usuario e senha em caracteres UPPERCASE acesso.conexaoMaxDB("localhost", "NSP", "SAPNSP", "PASSWORD"); // Cria comando SQL MaxDBCommand maxCmd = new MaxDBCommand(sql); maxCmd.Connection = connMaxDB; // Cria DataReader MaxDBDataReader maxDBreader = maxCmd.ExecuteReader(); dataTable = new DataTable(); dataTable.Load(maxDBreader); return dataTable; } public FormMaxDB() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { // Alimenta grade de dados FormMaxDB dados = new FormMaxDB(); dataGridView1.DataSource = dados.retornaTabela("Select * from SAPNSP.ZFUNCIONARIO"); } } }