Saudações a todos.

Neste artigo vamos conhecer um pouco mais sobre algumas funções do SqlDatasource em especial a função Select().

Para iniciarmos nossos estudos vamos antes saber como usá-la e qual é o seu retorno.

Em muitas situações do dia-a-dia temos que manipular controles SqlDataSource via código. Tal controle nos oferece propriedades e métodos importantíssimos para manipulação de dados, um deles é o Select. Este método executa uma consulta SQL baseada no comando definido na propriedade SelectCommand. Para que tal método funcione corretamente devemos proceder da seguinte forma.

      //Declaramos a variável string de conexão

      //Em seguida a string da consulta sql

      String conexao = "Data Source=ERA; Initial Catalog=AdventureWorks; Integrated Security=True";

      String sqlConsulta = "Select * From Person.Address Where City=Bothell";

      //Informamos a string de conexão para o SqlDataSource

      ds.ConnectionString = conexao;

      //Definimos qual o tipo de retorno do método. São dois DataSet e DataReader o padrão é DataSet.

      ds.DataSourceMode = SqlDataSourceMode.DataSet;

      //Passamos ao SelectCommand a consulta SQL.

      ds.SelectCommand = sqlConsulta;

      //Definimos o tipo de comando. Pode ser Text ou StoredProcedure 

      ds.SelectCommandType = SqlDataSourceCommandType.Text;

      //Executamos o Select().

      ds.Select(DataSourceSelectArguments.Empty);

 

Bem, vimos que para executar uma consulta usando o controle SqlDataSource é muito simples, mas qual é o retorno desta consulta?

A resposta é simples, veja que na linha ds.DataSourceMode = SqlDataSourceMode.DataSet estamos informando qual será o meu retorno, em outras palavras definimos um DataSet. Desta forma podemos vincular esse objeto a um Gridview por exemplo e ainda usar paginações e classificação dos dados, porém se definirmos como DataReader teremos os dados como read-only e  forward-only cursor.

 

Agora que já conhecemos um pouco do método select() vamos descobrir, por exemplo o total de registros de uma consulta. Obviamente existem muitas outras opções para tal tarefa, mas suponhamos que preciso tomar uma decisão baseado no retorno do método Select do controle SqlDataSource, ai é chegada a hora de trabalhar com eventos do SqlDataSource. Para uma prática mais real vamos criar um projeto web no VS2005 e nele acrescentar um GridView e um controle SqlDataSource, alem de um controle Label. Vou chama-los de grdConsulta, sqlDsConsulta e lblRetorno respectivamente.

 

Não precisa nenhuma configuração adicional. Vamos entra no evento Page_Load do arquivo Default.aspx e nele vamos adicionar o código necessário para a consulta como segue.

 

      //Declaramos a variável string de conexão

      //Em seguida a string da consulta sql

      String conexao = "Data Source=ERA; Initial Catalog=AdventureWorks; Integrated Security=True";

      String sqlConsulta = "Select * From Person.Address Where City=Bothell";

      //Informamos a string de conexão para o SqlDataSource

      sqlDsConsulta.ConnectionString = conexao;

      //Definimos qual o tipo de retorno do método. São dois DataSet e DataReader o padrão é DataSet.

      sqlDsConsulta.DataSourceMode = SqlDataSourceMode.DataSet;

      //Passamos ao SelectCommand a consulta SQL.

      sqlDsConsulta.SelectCommand = sqlConsulta;

      //Definimos o tipo de comando. Pode ser Text ou StoredProcedure 

      sqlDsConsulta.SelectCommandType = SqlDataSourceCommandType.Text;

      //Executamos o Select().

      sqlDsConsulta.Select(DataSourceSelectArguments.Empty);

      grdConsulta.DataSource = sqlDsConsulta;

      grdConsulta.DataBind();

Bem isso nós já sabíamos. Vamos agora codificar o evento sqlDsConsulta_Selected(object sender, SqlDataSourceStatusEventArgs e)

 

Esse evento ocorre sempre depois que um método Select() terminar. Então é nele que vamos descobrir quantos registros retornou esta consulta antes mesmo de renderizar os controles. Volte para o modo Design, selecione o controle SqlDataSource e no painel de propriedades, clique no botão de Events, figura 1.


Figura 1 – Ativando o painel de eventos do controle

 

 em seguida efetue um duplo clique no evento  Selected (figura 2) e codifique da seguinte forma.

f2.gif

Figura 2 – Evento Selected

 

 

  protected void sqlDsConsulta_Selected(object sender, SqlDataSourceStatusEventArgs e)

  {

    if(e.AffectedRows != 0)

    {

      Label1.Text = "Foram encontrados <font color=blue>" + e.AffectedRows + "</font> registros ";

 

    }

 

O evento Selected possui dois parâmetros, onde um deles (SqlDataSourceStatusEventArgs e) possui uma propriedade int (AffectedRows) o qual retorna o número de linhas afetadas pelo método. Baseado nisso construímos o nosso if().

 

 

Ao rodar sua aplicação terá o seguinte resultado:

 

f3.gif

 

Como neste caso estamos trabalhando com um DataSet você ainda pode configurar o Gridview para classificar dados e paginar.

 

Mude a linha

      //Definimos qual o tipo de retorno do método. São dois DataSet e DataReader o padrão é DataSet.

      sqlDsConsulta.DataSourceMode = SqlDataSourceMode.DataSet;

 

para

 

      //Definimos qual o tipo de retorno do método. São dois DataSet e DataReader o padrão é DataSet.

      sqlDsConsulta.DataSourceMode = SqlDataSourceMode.DataRead;

 

 e veja o que acontece com o resultado do label.

 

 

Bem galera, esse artigo resolvi fazer após receber alguns emails perguntando como descobrir o retorno do método Select do controle SqlDataSource, também vi em alguns fóruns a mesma dúvida, então achei interessante e o escrevi.

 

Boas práticas a todos e até o próximo.