Desenvolvimento - ADO.NET

Implementando CommandTimeOut em DataSets Tipados

Neste artigo o autor mostra como incluir a propriedade ConnectionTimeOut em DataSets Tipados em ASP.NET com VB.NET.

por Igor Musardo



Datasets para quem não conhece são objetos do ADO.Net, com o objetivo de ser o repositório de dados deste objeto, possuindo tabelas, colunas, linhas, etc. Um DataSet Tipado é uma classe que traz toda a estrutura das tabelas e possibilita o acesso às colunas do banco de dados como se fossem meras propriedades desta classe. Duas grandes vantagens em utilizar DataSet Tipado são:
· Poder visualizar e utilizar as tabelas do banco de dados como objetos de sua aplicação;

· Reutilizar o código, pois uma vez criado o DataSet Tipado a sua reutilização será baseada em definir uma nova instância desta classe.


O Visual Studio 2005 faz com que trabalhar com DataSets Tipados seja um trabalho simples, pois o seu editor gera o código básico de CRUD (Create, Read, Update e Delete) da tabela escolhida com apenas alguns cliques de mouse.


Porém ao criar um DataSet Tipado, o Visual Studio não disponibiliza uma maneira de configurar o CommandTimeOut para o nosso DataSet, ou seja, o tempo de resposta fica limitado a 30 segundos (TimeOut Padrão).


Então, se há no banco de dados uma consulta ou mesmo uma Procedure cujo tempo de resposta é superior a 30 segundos utilizar DataSet Tipado gerará erro em tempo de execução de TimeOut de banco de dados, o que gerará insatisfação por parte do cliente.


Como contornar essa limitação é o que vou demonstrar nesse artigo.


Primeiro passo será criar o DataSet Tipado, para tanto adicione um novo item do tipo “DataSet” com o nome de “Cliente.xsd” ao seu projeto como a Figura 1.

Figura 1 – Cliente.xsd

Com o arquivo criado, clique com o botão direito e insira um TableAdapter como na Figura 2.

Figura 2 - TableAdapter

Siga agora os passos descritos nas figuras.

Figura 3 - Selecione o arquivo Data.mdf e clique em Next.

Figura 4 - Salve a conexão com o nome de ConnectionString e clique em Next.

Figura 5 - Escolha a opção de Use SQL statements e clique em Next.

Figura 6 - Selecione a tabela TbCadCliente e clique em Add e depois em Close.

Figura 7 – Selecione as duas colunas, Id e NomeCliente e clique em OK.

Figura 8 – Clique em Next.

Figura 9 – Clique em Finish.

O resultado final deve ser como a figura 10.

Figura 10 – DataSet Tipado criado.

Agora que o DataSet foi criado, precisamos criar uma nova classe com o nome de “DataSetTimeOut”, onde será implementada a propriedade SelectCommandTimeOut conforme a Figura 11.

Figura 11 – Criar a Classe DataSetTimeOut.

Abra o arquivo para edição e substitua o conteúdo dele pelo código abaixo.

Imports Microsoft.VisualBasic

Namespace ClienteTableAdapters

Partial Class TbCadClienteTableAdapter

Public Property SelectCommandTimeout() As Integer

Get

Return Me.CommandCollection(0).CommandTimeout

End Get

Set(ByVal value As Integer)

Me.CommandCollection(0).CommandTimeout = value

End Set

End Property

End Class

End Namespace

O código acima estende a classe TbCadClienteTableAdapter, classe essa que foi gerada automaticamente pelo Visual Studio quando foi criado o DataSet.


A classe por sua vez foi inserida dentro do Namespace ClienteTableAdapters, o Visual Studio cria um novo Namespace para cada arquivo de DataSet existente no projeto, fazendo uso do seguinte padrão para o nomes de Namespace de DataSet Tipado, concatenção entre nome do arquivo .xsd, no caso Cliente.xsd, com o texto TableAdapters.


Após a breve explicação sobre as nomenclaturas do código acima, é preciso entender o que vou feito. Foi implementado uma nova propriedade pública (visível a todos os elementos do projeto em questão) chamada SelectCommandTimeout que apenas lê e altera o valor da variável privada (visível apenas a classe a que pertence) chamada CommandTimeout, que faz o controle do tempo de resposta limite.


Com essa implementação tornamos o acesso a variável CommanTimeout de privado para público através da propriedade SelectCommandTimeout.


Após salvar o arquivo, já é possível utilizar essa nova propriedade do DataSet Tipado Cliente como mostra o código abaixo.

Dim DsCliente As New ClienteTableAdapters.TbCadClienteTableAdapter

DsCliente.SelectCommandTimeout = 600

Pronto o DsCliente possui agora 10 minutos como tempo de resposta limite!

Forte abraço e divirta-se.

Igor Musardo

ivmplayer@gmail.com

Igor Musardo

Igor Musardo - Atua como desenvolvedor de sistemas web desde 2001, já trabalhou com ASP, PHP e há três anos trabalha ativamente com ASP.NET com VB.NET, estuda novas tecnologias e metodologias ágeis tendo preferência pela Extreme Programming.