Este tópico descreve como usar o driver PolarDB .NET para conectar sua aplicação C# a um banco de dados PolarDB for PostgreSQL (Compatible with Oracle).
Pré-requisitos
Crie uma conta de banco de dados no cluster PolarDB. Para mais informações, consulte Create a database account.
Adicione os endereços IP dos hosts que precisam acessar o cluster PolarDB a uma lista de permissões. Para mais informações, consulte Set a cluster whitelist.
Informações gerais
O PolarDB .NET, também conhecido como ADO.NET Data Provider for PolarDB, é um driver que permite o acesso ao PolarDB por aplicações escritas em C#, Visual Basic ou F#. Esse driver é compatível com Entity Framework Core e Entity Framework 6.x, possibilitando o desenvolvimento rápido de aplicações com Entity Framework.
O driver atual utiliza o protocolo PostgreSQL 3.0 e oferece compatibilidade com .NET Framework 2.0, .NET Framework 4.0, .NET Framework 4.5 e .NET Core 2.0.
Nas versões anteriores do driver PolarDB .NET, muitos tipos internos tinham o prefixo POLARDB. Esses nomes foram alterados para PolarDB. Para atualizar seu código, substitua o texto correspondente. A lógica subjacente do driver não sofreu alterações; portanto, você pode fazer o upgrade com segurança.
Entity Framework
Entity Framework é um framework popular de mapeamento objeto-relacional (ORM) para a plataforma .NET. Ao desenvolver aplicações back-end em C#, o uso combinado de Entity Framework e Language-Integrated Query (LINQ) acelera significativamente o desenvolvimento.
O driver PolarDB .NET fornece DLLs com suporte a Entity Framework 5 (EF5) e Entity Framework 6 (EF6).
Para mais detalhes sobre o Entity Framework, consulte o site oficial do Entity Framework.
Instale o driver .NET
Baixe o driver .NET.
-
Descompacte o pacote do driver .NET.
unzip polardb_oracle_.net.zip -
Importe o driver para seu projeto no Visual Studio.
Na interface do Visual Studio, clique em com o botão direito no projeto e selecione Add Reference.
-
Na caixa de diálogo Reference Manager, clique em em Browse.
Use o botão Browse... para selecionar os arquivos de referência.
-
Na caixa de diálogo Select the files to reference, selecione a versão apropriada do driver e clique em em Add.
Por exemplo, se estiver usando .NET Framework 4.5 (pasta net45), referencie quatro arquivos DLL:
PolarDB.PolarDBClient.dll,System.Runtime.CompilerServices.Unsafe.dll,System.Threading.Tasks.Extensions.dlleSystem.ValueTuple.dll. Clique em em OK.
Exemplo
Siga estas etapas para executar os projetos de exemplo.
Conecte-se ao cluster de banco de dados. Para mais informações, consulte Connect to a database cluster.
-
Execute o comando a seguir para criar um banco de dados chamado
sampledb.CREATE DATABASE sampledb; -
Importe as tabelas, os dados e as funções necessários para o exemplo no banco de dados
sampledb.\i ${your path}/PolarDBSample.sql -
Após importar os dados, comece a escrever seu código C#.
Veja a seguir um exemplo de consulta, atualização e chamada de stored procedures.
using System; using System.Data; using PolarDB.PolarDBClient; /* * This class provides a simple way to perform DML operations in PolarDB * * @revision 1.0 */ namespace PolarDBClientTest { class SAMPLE_TEST { static void Main(string[] args) { PolarDBConnection conn = new PolarDBConnection("Server=localhost;Port=5432;User Id=polaruser;Password=password;Database=sampledb"); try { conn.Open(); //Simple select statement using PolarDBCommand object PolarDBCommand PolarDBSeletCommand = new PolarDBCommand("SELECT EMPNO,ENAME,JOB,MGR,HIREDATE FROM EMP",conn); PolarDBDataReader SelectResult = PolarDBSeletCommand.ExecuteReader(); while (SelectResult.Read()) { Console.WriteLine("Emp No" + " " + SelectResult.GetInt32(0)); Console.WriteLine("Emp Name" + " " + SelectResult.GetString(1)); if (SelectResult.IsDBNull(2) == false) Console.WriteLine("Job" + " " + SelectResult.GetString(2)); else Console.WriteLine("Job" + " null "); if (SelectResult.IsDBNull(3) == false) Console.WriteLine("Mgr" + " " + SelectResult.GetInt32(3)); else Console.WriteLine("Mgr" + "null"); if (SelectResult.IsDBNull(4) == false) Console.WriteLine("Hire Date" + " " + SelectResult.GetDateTime(4)); else Console.WriteLine("Hire Date" + " null"); Console.WriteLine("---------------------------------"); } //Insert statement using PolarDBCommand Object SelectResult.Close(); PolarDBCommand PolarDBInsertCommand = new PolarDBCommand("INSERT INTO EMP(EMPNO,ENAME) VALUES((SELECT COUNT(EMPNO) FROM EMP),'JACKSON')",conn); PolarDBInsertCommand.ExecuteScalar(); Console.WriteLine("Record inserted"); //Update using PolarDBCommand Object PolarDBCommand PolarDBUpdateCommand = new PolarDBCommand("UPDATE EMP SET ENAME ='DOTNET' WHERE EMPNO < 100",conn); PolarDBUpdateCommand.ExecuteNonQuery(); Console.WriteLine("Record has been updated"); PolarDBCommand PolarDBDeletCommand = new PolarDBCommand("DELETE FROM EMP WHERE EMPNO < 100",conn); PolarDBDeletCommand.CommandType= CommandType.Text; PolarDBDeletCommand.ExecuteScalar(); Console.WriteLine("Record deleted"); //procedure call example try { PolarDBCommand callable_command = new PolarDBCommand("emp_query(:p_deptno,:p_empno,:p_ename,:p_job,:p_hiredate,:p_sal)", conn); callable_command.CommandType = CommandType.StoredProcedure; callable_command.Parameters.Add(new PolarDBParameter("p_deptno",PolarDBTypes.PolarDBDbType.Numeric,10,"p_deptno",ParameterDirection.Input,false ,2,2,System.Data.DataRowVersion.Current,20)); callable_command.Parameters.Add(new PolarDBParameter("p_empno", PolarDBTypes.PolarDBDbType.Numeric,10,"p_empno",ParameterDirection.InputOutput,false ,2,2,System.Data.DataRowVersion.Current,7369)); callable_command.Parameters.Add(new PolarDBParameter("p_ename", PolarDBTypes.PolarDBDbType.Varchar,10,"p_ename",ParameterDirection.InputOutput,false ,2,2,System.Data.DataRowVersion.Current,"SMITH")); callable_command.Parameters.Add(new PolarDBParameter("p_job", PolarDBTypes.PolarDBDbType.Varchar,10,"p_job",ParameterDirection.Output,false ,2,2,System.Data.DataRowVersion.Current,null)); callable_command.Parameters.Add(new PolarDBParameter("p_hiredate", PolarDBTypes.PolarDBDbType.Date,200,"p_hiredate",ParameterDirection.Output,false ,2,2,System.Data.DataRowVersion.Current,null)); callable_command.Parameters.Add(new PolarDBParameter("p_sal", PolarDBTypes.PolarDBDbType.Numeric,200,"p_sal",ParameterDirection.Output,false ,2,2,System.Data.DataRowVersion.Current,null)); callable_command.Prepare(); callable_command.Parameters[0].Value = 20; callable_command.Parameters[1].Value = 7369; PolarDBDataReader result = callable_command.ExecuteReader(); int fc = result.FieldCount; for(int i=0;i<fc;i++) Console.WriteLine("RESULT["+i+"]="+ Convert.ToString(callable_command.Parameters[i].Value)); result.Close(); } // If you are using the .NET 2.0 driver, you may need to modify this section. catch(PolarDBException exp) { if(exp.ErrorCode.Equals("01403")) Console.WriteLine("No data found"); else if(exp.ErrorCode.Equals("01422")) Console.WriteLine("More than one row was returned by the query"); else Console.WriteLine("There was an error calling the procedure. \nRoot Cause:\n"); Console.WriteLine(exp.Message.ToString()); } //Prepared statement string updateQuery = "update emp set ename = :Name where empno = :ID"; PolarDBCommand Prepared_command = new PolarDBCommand(updateQuery, conn); Prepared_command.CommandType = CommandType.Text; Prepared_command.Parameters.Add(new PolarDBParameter("ID", PolarDBTypes.PolarDBDbType.Integer)); Prepared_command.Parameters.Add(new PolarDBParameter("Name", PolarDBTypes.PolarDBDbType.Text)); Prepared_command.Prepare(); Prepared_command.Parameters[0].Value = 7369; Prepared_command.Parameters[1].Value = "Mark"; Prepared_command.ExecuteNonQuery(); Console.WriteLine("Record Updated..."); } catch(PolarDBException exp) { Console.WriteLine(exp.ToString() ); } finally { conn.Close(); } } } }
Parâmetros da string de conexão
Ao conectar sua aplicação a um banco de dados, forneça uma string de conexão contendo parâmetros como host, nome de usuário e senha.
O formato da string de conexão é keyword1=value; keyword2=value;. As palavras-chave não diferenciam maiúsculas de minúsculas. Coloque valores que contenham caracteres especiais, como ponto e vírgula, entre aspas duplas ("").
Este driver suporta os seguintes parâmetros de string de conexão.
Tabela 1. Conexão básica
|
Parâmetro |
Exemplo |
Descrição |
|
Host |
|
Endpoint do cluster PolarDB. Para mais informações, consulte View or apply for an endpoint. |
|
Port |
|
Porta padrão do cluster PolarDB: 1521. |
|
Database |
|
Nome do banco de dados de destino. |
|
Username |
|
Nome de usuário do cluster PolarDB. |
|
Password |
|
Senha do usuário do cluster PolarDB. |
Tabela 2. Pool de conexões
|
Parâmetro |
Exemplo |
Descrição |
|
Pooling |
|
Define se o pool de conexões deve ser ativado. |
|
Minimum Pool Size |
0 |
Quantidade mínima de conexões mantidas no pool. |
|
Maximum Pool Size |
100 |
Limite máximo de conexões permitidas no pool. |
|
Connection Idle Lifetime |
300 |
Tempo limite em segundos. Após esse período, conexões ociosas são fechadas caso o tamanho do pool exceda o Minimum Pool Size. |
|
Connection Pruning Interval |
10 |
Intervalo em segundos para remoção de conexões ociosas do pool. |
Tabela 3. Outros parâmetros
|
Parâmetro |
Descrição |
|
Application name |
Nome da aplicação. |
|
Search path |
Caminho de busca do schema. |
|
Client encoding |
Codificação do cliente. |
|
Time zone |
Fuso horário da sessão. |