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