none
[Duvida] Como funciona o SqlParameter RRS feed

  • Pergunta

  • Boa noite,

     

    Estou começando agora com C# e estou acompanhando um livro(Desenvolvendo em Camadas com C# .NET) e pegando exemplos na internet, aos poucos estou aprendendo. Mas agora estou com duvida quanto ao funcionamento do SqlParameter() e cmd.Parameters.Add() pois os exemplos que pego na net, usam o northwind que nao consegui instalar de jeito nenhum, entao montei um BD semelhante com nomes criados por mim mesmo só pra acompanhar e entender os codigos da internet.

     

    Tenho 4 exemplos:

     

    1)

     

     SqlCommand storedProcCommand =  new SqlCommand ("listaClientes", con);
     storedProcCommand.CommandType = CommandType.StoredProcedure;
     storedProcCommand.Parameters.Add("@ID",clienteID);
    

    2)

     

    cmd.Parameters.Add(
      new SqlParameter(
       "@criterio",      // o nome do parametro
       System.Data.SqlDbType.NVarChar, // o tipo de dado SqlDbType
       40,                       // o tamanho do parametro
       "ProductName"));// o nome da coluna na tabela a qual se aplica
    


    3)

    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "insere_cliente";
    SqlParameter pnome = new SqlParameter("@nome",SqlDbType.NVarChar, 100);
    pnome.value = cliente.Nome;
    cmd.Parameters.Add(pnome);
    


    4)

    SqlCommand command = new SqlCommand("SELECT * FROM Dogs1 WHERE Name LIKE @Name", connection);
    command.Parameters.Add(new SqlParameter("Name", dogName));
    

     

    Estou com problemas pra entender os comandos e parametros, pois ha varias formas de se fazer como mostra os exemplo. Se alguem puder ajudar a entender esses codigos pq nao acho uma explicação um pouco mais detalhada, e como nao tenho o banco de dados especifico dos exemplos, fica meio dificil entender o que esta relacionado com as colunas das tabelas, o que é apenas um rótulo...

     

    Qualquer link explicando ajuda se for possível.

     

     

    Obrigado por qualquer ajuda.

     

    terça-feira, 23 de agosto de 2011 21:56

Respostas

  • Olá,

    Basicamente você vai mencionar os nomes dos parâmetros na sua query (no CommandText do SqlCommand) utilizando @ (arroba) e um nome... Depois você adiciona os SqlParameters na lista de parâmetros (propriedade Parameters) do comando... Quando você trabalha com comandos simples (CommandType.Text), você vai mencionar os parâmetros na query e adicionar nos Parameters do comando... Já quando você trabalha com Stored Procedures, os nomes já estarão definidos na Stored Procedure e você deve utilizar exatamente os mesmos nomes que foram definidos na Stored Procedure do lado do C#...

    Eu gosto muito de indicar o tutorial abaixo sobre Parameters no ADO.NET... Veja se te ajuda em algo:

    http://www.csharp-station.com/Tutorials/AdoDotNet/Lesson06.aspx


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    terça-feira, 23 de agosto de 2011 23:49
    Moderador
  • Olá Hoplita,

    A grosso modo todos os exemplos fazem a mesma coisa... que é: adicionar um novo parâmetro.

    Vamos ver um por vez:

    1)  Neste exemplo vc está criando um SQLCommand, e afirmando que utiliza uma stored procedure chamada "ListaClientes", cujo único parâmetro é "@ID" e seu correspondente valor esta contido na variável clienteID.

     

    2)  Neste exemplo vc está adicionando um parâmetro de nome "@criterio", cujo tipo de dados é NVarchar, de tamanho 40... o parâmetro source column é ideal para quando utilizamos SQLDataAdapter, pois ele podem ser muito úteis na hora de construir claúsulas de Insert e Update

     

    3)  O terceiro exemplo vc faz algo diferente dos demais... Primeiro se cria uma instância de um SQLParameter, que atribuindo um nome, um tipo de dados e um tamanho... logo depois se atribui o valor que deve ser passado para a Stored Procedure, e depois este parâmetro é adicionado na coleção de parâmetro do SQLCommand que será executado... Esta é outra maneira muito útil...

     

    4) O quarto exemplo é semelhante ao terceiro... neste caso vc não cria a instância do SQLParameter em uma linha acima... vc cria a instância do SQLParameter dentro da chamada do método de inclusão de novos parâmetros... Essa alternativa não economiza alocamento de memória, nem é mais rápido... apenas economiza linhas de código... Eu não gosto muito de utilizar essa prática, pois sou a favor de um código limpo e fácil de ser entendido...

     

    Resumindo:

    - No dois primeiro exemplos vc utiliza um método que recebe por parâmetro características que deve funcionar como base para construção interna de um SQLParameter...

    - Nos dois últimos exemplos vc cria o SQLParameter e passa-o para que seja incluido na coleção de parâmetros...

     

    Eu particularmente gosto do método AddWithValue... que em apenas uma linha já digo o nome do parâmetro e o valor que deve ser passado como parâmetro... e internamente o .Net Framework se adequa a minha necessidade...

     

    Desta forma:

    SqlCommand cmd = new SqlCommand();
    
    cmd.Parameters.AddWithValue("@inteiro", 1);
    cmd.Parameters.AddWithValue("@texto", "olá, enfermeira");
    cmd.Parameters.AddWithValue("@globalID", Guid.NewGuid());
    

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.wordpress.com/
    Twitter: @ferhenrique
    terça-feira, 23 de agosto de 2011 23:58
    Moderador

Todas as Respostas

  • Olá,

    Basicamente você vai mencionar os nomes dos parâmetros na sua query (no CommandText do SqlCommand) utilizando @ (arroba) e um nome... Depois você adiciona os SqlParameters na lista de parâmetros (propriedade Parameters) do comando... Quando você trabalha com comandos simples (CommandType.Text), você vai mencionar os parâmetros na query e adicionar nos Parameters do comando... Já quando você trabalha com Stored Procedures, os nomes já estarão definidos na Stored Procedure e você deve utilizar exatamente os mesmos nomes que foram definidos na Stored Procedure do lado do C#...

    Eu gosto muito de indicar o tutorial abaixo sobre Parameters no ADO.NET... Veja se te ajuda em algo:

    http://www.csharp-station.com/Tutorials/AdoDotNet/Lesson06.aspx


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    terça-feira, 23 de agosto de 2011 23:49
    Moderador
  • Olá Hoplita,

    A grosso modo todos os exemplos fazem a mesma coisa... que é: adicionar um novo parâmetro.

    Vamos ver um por vez:

    1)  Neste exemplo vc está criando um SQLCommand, e afirmando que utiliza uma stored procedure chamada "ListaClientes", cujo único parâmetro é "@ID" e seu correspondente valor esta contido na variável clienteID.

     

    2)  Neste exemplo vc está adicionando um parâmetro de nome "@criterio", cujo tipo de dados é NVarchar, de tamanho 40... o parâmetro source column é ideal para quando utilizamos SQLDataAdapter, pois ele podem ser muito úteis na hora de construir claúsulas de Insert e Update

     

    3)  O terceiro exemplo vc faz algo diferente dos demais... Primeiro se cria uma instância de um SQLParameter, que atribuindo um nome, um tipo de dados e um tamanho... logo depois se atribui o valor que deve ser passado para a Stored Procedure, e depois este parâmetro é adicionado na coleção de parâmetro do SQLCommand que será executado... Esta é outra maneira muito útil...

     

    4) O quarto exemplo é semelhante ao terceiro... neste caso vc não cria a instância do SQLParameter em uma linha acima... vc cria a instância do SQLParameter dentro da chamada do método de inclusão de novos parâmetros... Essa alternativa não economiza alocamento de memória, nem é mais rápido... apenas economiza linhas de código... Eu não gosto muito de utilizar essa prática, pois sou a favor de um código limpo e fácil de ser entendido...

     

    Resumindo:

    - No dois primeiro exemplos vc utiliza um método que recebe por parâmetro características que deve funcionar como base para construção interna de um SQLParameter...

    - Nos dois últimos exemplos vc cria o SQLParameter e passa-o para que seja incluido na coleção de parâmetros...

     

    Eu particularmente gosto do método AddWithValue... que em apenas uma linha já digo o nome do parâmetro e o valor que deve ser passado como parâmetro... e internamente o .Net Framework se adequa a minha necessidade...

     

    Desta forma:

    SqlCommand cmd = new SqlCommand();
    
    cmd.Parameters.AddWithValue("@inteiro", 1);
    cmd.Parameters.AddWithValue("@texto", "olá, enfermeira");
    cmd.Parameters.AddWithValue("@globalID", Guid.NewGuid());
    

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.wordpress.com/
    Twitter: @ferhenrique
    terça-feira, 23 de agosto de 2011 23:58
    Moderador