Dev (Back & Front)ARTIGO

VB .NET – Obtendo estatísticas da conexão como SQL Server

Se você precisa obter informações sobre sua conexão e ela for feita com um
banco de dados SQL Server, então você está garantido. Você pode obter informação sobre
sua conexão com o SQL Server, incluindo bytes enviados e
recebidos, tempo de conexão e execução etc. Para isso basta usar o método
RetrieveStatistics() da classe Connection().

Vamos ver um exemplo usando
este recurso usando o VS 2010 beta 2 (tô
usando e abusando do
danado).

No exemplo deste artigo vamos criar
uma conexão com o banco de dados Northwind.mdf e obter as
estatísticas definindo a propriedade
EnableStatistics do objeto
Connection para True.

Iremos criar um DataAdapter que
será usado para preencher um DataTable com os registros da
tabela Products do banco de dados Northwind.mdf.

As estatísticas serão retornados
em um objeto Dictionary usando o método RetrieveStatistics()
do
objeto Connection() e então iremos exibi-lo no controle
ListBox.

Então, crie um novo projeto do tipo
Windows Forms Application com o nome SQL_Estatisticas;

A seguir no formulário padrão form1.vb

inclua um controle ListBox(lstEstatisticas) e um controle
Button(btnEstatisticas)
conforme o leiaute abaixo:

Defina os seguintes namespaces no
formulário:

Imports System.Data
Imports System.Data.SqlClient

A seguir no evento Click do botão de
comando inclua
o código abaixo:

     Private Sub btnEstatistica_Click(ByVal sender As System.Object,<br /> ByVal e As System.EventArgs) Handles btnEstatistica.Click<br /><br /><br />  Dim sqlConnectString As String = "Data <br />Source=.\SQLEXPRESS;AttachDbFilename=C:\dados\NORTHWND.MDF;Integrated <br />Security=True;User Instance=True"<br />        Dim sqlSelect As String = <br />"SELECT * FROM Products"<br /><br />        'abre a conexão e habilita as <br />estatisticas<br />        Using connection As New <br />SqlConnection(sqlConnectString)<br /><br />connection.StatisticsEnabled = True<br /><br />            ' faz algum <br />trabalho com a conexão <br />            Dim da As New <br />SqlDataAdapter(sqlSelect, connection)<br />            Dim dt As New <br />DataTable()<br />            da.Fill(dt)<br /><br />            'obtem as <br />estatisticas<br />         Dim d As IDictionary = <br />connection.RetrieveStatistics()<br />            'move as chaves do <br />dictionary para um array<br />            Dim keys As String() = New <br />String(d.Count - 1) {}<br />            d.Keys.CopyTo(keys, 0)<br /><br /><br />        lstEstatisticas.Items.Add("Estatísticas - SQL Server")<br /><br />      lstEstatisticas.Items.Add("")<br />            ' percorre o <br />dicionario exibindo os valores das chaves<br />            For i As <br />Integer = 0 To d.Count - 1<br /><br />lstEstatisticas.Items.Add(keys(i) & " - " & (d(keys(i))))<br /><br />         Next<br />        End Using<br /><br />    End Sub

A versão C# para o código acima ficaria
assim:

private void btnEstatistica_Click(System.Object sender, <br />System.EventArgs e)<br />{<br /><br />    string sqlConnectString = "Data <br />Source=.\\SQLEXPRESS;AttachDbFilename=C:\\dados\\NORTHWND.MDF;Integrated<br /> Security=True;User Instance=True";<br />    string sqlSelect = "SELECT * <br />FROM Products";<br /><br />    //abre a conexão e habilita as <br />estatisticas<br />    using (SqlConnection connection = new <br />SqlConnection(sqlConnectString)) {<br /><br />connection.StatisticsEnabled = true;<br /><br />        // faz algum<br /> trabalho com a conexão <br />        SqlDataAdapter da = new <br />SqlDataAdapter(sqlSelect, connection);<br />        DataTable dt = new <br />DataTable();<br />        da.Fill(dt);<br /><br />        //obtem as <br />estatisticas<br />        IDictionary d = connection.RetrieveStatistics();<br /><br />        //move as chaves do dictionary para um array<br />        string[]<br /> keys = new string[d.Count];<br />        d.Keys.CopyTo(keys, 0);<br /><br /><br />        lstEstatisticas.Items.Add("Estatísticas - SQL Server");<br /><br />        lstEstatisticas.Items.Add("");<br />        // percorre o <br />dicionario exibindo os valores das chaves<br />        for (int i = 0; i <br /><= d.Count - 1; i++) {<br /><br />lstEstatisticas.Items.Add(keys(i) + " - " + (d(keys(i))));<br />        }<br /><br /><br />    }<br />}

Executando o projeto e clicando no botão
para
exibir as estatísticas, iremos obter:

Você precisa habilitar as estatísticas
definindo a
propriedade StatisticsEnabled do objeto SqlConnection para

True, depois que a conexão tiver sido
criada.

A partir deste momento as estatísticas
poderão ser
obtidas, e, no nosso exemplo usamos uma instância da interface IDictionary

e o método RetrieveStatistics() do objeto SqlConnection.

O provedor de dados para o SQL Server do
.NET
Framework 3.5 permite obter 18
estatísticas.
Para resetar os contadores basta usar o método ResetStatistics().

Todas as estatísticas são reunidas por
conexão e
são válidas para o momento atual, se você continuar a usar a conexão
depois de
retornar as estatísticas você terá que usar o método RetrieveStatistics()

novamente para obter os novos valores.

Pegue o projeto completo aqui: SQL_Estatisticas.zip

(lembre-se que você precisa do VS 2010 beta 2 para abrir o projeto)

Aguarde mais artigos sobre VB .NET.

é referência em Visual Basic no Brasil e autor dos livros "Aprenda Rápido: ASP" e "ASP, ADO e Banco de Dados na Internet". Mantenedor do site macoratti.net.

Ver perfil