ADO .NET - Acesso Assíncrono aos dados no .NET Core - I
Vamos rever os conceitos para realizar o acesso assíncrono aos dados usando a ADO .NET no ambiente .NET Core. |
O acesso a um banco de dados é uma tarefa custosa pode afetar a sua aplicação e a interação com o usuário.
As classes da ADO.NET permite realizar a programação assíncrono baseada em tarefas, e oferece métodos assíncronos (além dos métodos síncronos). A partir do Microsoft .Net Framework 4.5 temos o suporte para realizar operações de bancos de dados assíncronos e isso também esta suportado no .NET Core.
Podemos assim usar os métodos assíncronos para maximizar a escalabilidade e a taxa de transferência dos dados tornando nossa aplicação mais rápida.
Para ilustrar abaixo temos um trecho de código que mostra como implementar uma operação assíncrona usando ADO .NET:
using (SqlConnection connection = new SqlConnection(connectionString)
{
await connection.OpenAsync();
//código...
await reader.ReadAsync();
//mais código...
}
|
Observe a utilização dos métodos OpenAsycn e ReadAsync bem como o uso da palavra await.
Junto com a palavra await sempre usamos async para realizar uma tarefa ou Task. Vamos recordar como eles atuam:
1 - async
2- await
3- Task
Vejamos a seguir um exemplo prático onde vamos acessar um banco de dados Cadastro.mdf do SQL Server e a tabela Livros cuja estrutura e dados vemos abaixo:
Criando o projeto .NET Core
Vamos criar um projeto .NET Core do tipo Console App(.NET Core) com o nome NetCore_AdoNetAsync.
A seguir precisamos referenciar os seguintes namespaces via Nuget:
Para isso acesse o menu Tools -> Nuget Package Manager -> Manage Nuget Packages for Solution;
A seguir clique na guia Browse, digite o namespace desejado, selecione , e clique no botão Install;
Ao final o arquivo de projeto NetCore_AdoNetAsync.csproj deverá estar assim:
<Project
Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp2.1</TargetFramework> <LangVersion>7.2</LangVersion> </PropertyGroup> <ItemGroup> <PackageReference Include="System.Data.Common" Version="4.3.0" /> <PackageReference Include="System.Data.SqlClient" Version="4.6.0" /> </ItemGroup> </Project> |
No arquivo Program.cs inclua os seguintes namespaces:
using System;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Data;
using static System.Console;
A seguir defina o seguinte método Main():
public static async Task Main()
{
await LerDadosAsync();
ReadLine();
}
|
Para poder usar este método Main() você precisa estar usando no mínimo C# 7.1.
Agora defina o método LerDadosAsycn();
public static async Task LerDadosAsync()
{
var connection = new SqlConnection(GetStringConexao());
string sql = "SELECT LivroId, Titulo, Autor, DataLancamento FROM Livros";
var command = new SqlCommand(sql, connection);
await connection.OpenAsync();
using (SqlDataReader reader = await command.ExecuteReaderAsync(CommandBehavior.CloseConnection))
{
while (await reader.ReadAsync())
{
int id = reader.GetInt32(0);
string tituloLivro = reader.GetString(1);
string autorLivro = reader[2].ToString();
DateTime? lancamentoLivro = reader.IsDBNull(3) ? (DateTime?)null : reader.GetDateTime(3);
WriteLine($"{id,5}. {tituloLivro,-40} {autorLivro,-15} " + $"{lancamentoLivro:d}");
}
}
}
static string GetStringConexao()
{
return "Data Source=Macoratti;Initial Catalog=Cadastro;Integrated Security=True";
}
|
Neste código estamos usando chamadas do método Async.
A conexão é aberta com SqlConnection.OpenAsync, o leitor é retornado do método SqlCommand.ExecuteReaderAsync; sendo que os registros são recuperados usando SqlDataReader.ReadAsync.
Nesta abordagem a thread de chamada não está bloqueada, mas pode fazer outra operação antes de obter o resultado.
O resultado é exibido abaixo:
Na segunda parte do artigo veremos como podemos criar métodos para obter e
executar comandos assincronos.
Pegue o projeto aqui: NetCore_AdoNetAsync.zip
"Palavra fiel
é esta: que, se morrermos com ele, também com ele viveremos;
Se sofrermos, também com ele reinaremos; se o negarmos, também ele nos negará;
Se formos infiéis, ele permanece fiel; não pode negar-se a si mesmo."
2 Timóteo 2:11-13
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
Criando uma proteção de tela - Macoratti
C# - ADO .NET para iniciantes - Macoratti
ADO.NET - Uma visão geral : Objetos Connection - Macoratti
ADO NET - Acesso a dados - Macoratti
ASP.NET - Acessando dados com ADO.NET - Macoratti
ASP .NET Core MVC - CRUD básico com ADO .NET - Macoratti
C# - CRUD com ADO .NET e Stored Procedures - Macoratti