Passo a passo: usar somente procedimentos armazenados (C#)

Esta explicação passo a passo fornece um cenário básico de LINQ to SQL de ponta a ponta para acessar os dados executando somente procedimentos armazenados. Essa abordagem é frequentemente usada por administradores de banco de dados para limitar como o repositório de dados é acessado.

Observação

Também é possível usar os procedimentos armazenados em aplicativos do LINQ to SQL para substituir o comportamento padrão, especialmente para os processosCreate, Update e Delete. Para obter mais informações, confira Personalizar operações de inserção, atualização e exclusão.

Neste passo a passo, você usará dois métodos que foram mapeados para os procedimentos armazenados no banco de dados de exemplo Northwind: CustOrdersDetail e CustOrderHist. O mapeamento ocorre quando você executa a ferramenta de linha de comando SqlMetal para gerar um arquivo C#. Para obter mais informações, consulte a seção Pré-requisitos posteriormente neste passo a passo.

Esta explicação passo a passo não depende do Object Relational Designer. Os desenvolvedores que usam o Visual Studio também podem utilizar o O/R Designer para implementar a funcionalidade de procedimento armazenado. Confira Ferramentas do LINQ to SQL no Visual Studio.

Observação

Seu computador pode mostrar diferentes nomes ou locais para alguns dos elementos de interface do usuário do Visual Studio nas instruções a seguir. A edição do Visual Studio que você possui e as configurações que você usa determinam esses elementos. Para obter mais informações, consulte Personalizando o IDE.

Esse passo a passo foi escrito usando as configurações de desenvolvimento do Visual C#.

Pré-requisitos

Este passo a passo requer o seguinte:

  • Este passo a passo usa uma pasta dedicada ("c:\linqtest7") para armazenar arquivos. Crie essa pasta antes de iniciar o passo a passo.

  • O banco de dados de exemplo Northwind.

    Se você não tiver esse banco de dados no seu computador de desenvolvimento, poderá baixá-lo no site de download da Microsoft. Para obter as instruções, consulte Baixar bancos de dados de exemplo. Depois de baixar o banco de dados, copie o arquivo northwnd.mdf para a pasta c:\linqtest7.

  • Um arquivo de código C# gerado no banco de dados Northwind.

    Este passo a passo foi escrito usando a ferramenta SqlMetal com a seguinte linha de comando:

    sqlmetal /code:"c:\linqtest7\northwind.cs" /language:csharp "c:\linqtest7\northwnd.mdf" /sprocs /functions /pluralize

    Para obter mais informações, consulte SqlMetal.exe (ferramenta de geração de código).

Visão geral

Este passo a passo consiste em seis tarefas principais:

  • Configurando a solução LINQ to SQL no Visual Studio.

  • Adicionar o assembly System.Data.Linq ao projeto.

  • Adicionar o arquivo do código de banco de dados ao projeto.

  • Criar uma conexão com o banco de dados.

  • Configurar a interface do usuário.

  • Executar e testar o aplicativo.

Criando uma solução LINQ to SQL

Nesta primeira tarefa, você criará uma solução do Visual Studio com as referências necessárias para compilar e executar um projeto do LINQ to SQL.

Para criar uma solução LINQ to SQL

  1. No Visual Studio, no menu Arquivo, aponte para Novo e, em seguida, clique em Projeto.

  2. No painel Tipos de projeto, na caixa de diálogo Novo Projeto, clique em Visual C#.

  3. No painel Modelos, clique em Aplicativo do Windows Forms.

  4. Na caixa Nome, digite SprocOnlyApp.

  5. Na caixa Localização, verifique onde você quer armazenar os arquivos de projeto.

  6. Clique em OK.

    O Designer de Formulários do Windows é aberto.

Adicionando a referência do assembly do LINQ to SQL

O assembly do LINQ to SQL não está incluído no modelo padrão do Aplicativo Windows Forms. Você mesmo precisará adicionar o assembly, conforme explicado nas etapas a seguir:

Para adicionar o System.Data.Linq.dll

  1. No Gerenciador de Soluções, clique com o botão direito do mouse em Referências e clique em Adicionar Referência.

  2. Na caixa de diálogo Adicionar Referência, clique em .NET, clique no assembly System.Data.Linq e, em seguida, clique em OK.

    O assembly é adicionado ao projeto.

Adicionando o arquivo do código Northwind ao projeto

Esta etapa presume que você usou a ferramenta SqlMetal para gerar um arquivo de código do banco de dados de exemplo Northwind. Para obter mais informações, consulte a seção de pré-requisitos anteriormente neste passo a passo.

Para adicionar o arquivo do código Northwind ao projeto

  1. No menu Projeto , clique em Adicionar Item Existente.

  2. Na caixa de diálogo Adicionar Item Existente, vá até c:\linqtest7\northwind.cs e clique em Adicionar.

    O arquivo northwind.cs é adicionado ao projeto.

Criando uma conexão de banco de dados

Nesta etapa, você define a conexão com o banco de dados de exemplo Northwind. Este passo a passo usa "c:\linqtest7\northwnd.mdf" como caminho.

Par criar a conexão de banco de dados

  1. No Gerenciador de Soluções, clique com o botão direito do mouse em Form1.cs e, em seguida, clique em Exibir Código.

  2. Digite o código a seguir na classe Form1:

    Northwnd db = new Northwnd(@"c:\linqtest7\northwnd.mdf");
    

Configurando a interface do usuário

Nesta tarefa, você configura uma interface de modo que os usuários possam executar procedimentos armazenados para acessar dados no banco de dados. Nos aplicativos que você está desenvolvendo através deste passo a passo, os usuários só podem acessar dados no banco de dados usando os procedimentos armazenados inseridos no aplicativo.

Para configurar a interface do usuário

  1. Retorne ao Designer de Formulários do Windows (Form1.cs[Design]).

  2. No menu Exibir , clique em Caixa de Ferramentas.

    A caixa de ferramentas é aberta.

    Observação

    Clique no pino AutoHide para manter a caixa de ferramentas aberta enquanto você executa as etapas restantes nesta seção.

  3. Arraste dois botões, duas caixas de texto e dois rótulos da caixa de ferramentas para Form1.

    Organize os controles conforme mostrado na ilustração de acompanhamento. Expanda Form1 de modo que os controles se encaixem facilmente.

  4. Clique com o botão direito do mouse em label1 e, em seguida, clique em Propriedades.

  5. Altere a propriedade do Texto de label1 para Inserir OrderID:.

  6. Da mesma forma para label2, altere a propriedade do Texto de label2 para Inserir CustomerID:.

  7. Da mesma forma, altere a propriedade do Texto de button1 para Detalhes do Pedido.

  8. Altere a propriedade do Texto para button2 para Histórico de Pedidos.

    Amplie os controles de botão de modo que todo o texto fique visível.

Para manipular cliques de botão

  1. Clique duas vezes em Detalhes do Pedido em Form1 para abrir o manipulador de eventos de button1 no editor de códigos.

  2. Digite o código a seguir no manipulador button1:

    // Declare a variable to hold the contents of
    // textBox1 as an argument for the stored
    // procedure.
    string param = textBox1.Text;
    
    // Declare a variable to hold the results
    // returned by the stored procedure.
    var custquery = db.CustOrdersDetail(Convert.ToInt32(param));
    
    // Execute the stored procedure and display the results.
    string msg = "";
    foreach (CustOrdersDetailResult custOrdersDetail in custquery)
    {
        msg = msg + custOrdersDetail.ProductName + "\n";
    }
    if (msg == "")
        msg = "No results.";
    MessageBox.Show(msg);
    
    // Clear the variables before continuing.
    param = "";
    textBox1.Text = "";
    
  3. Agora, clique duas vezes em button2 em Form1 para abrir o manipulador button2

  4. Digite o código a seguir no manipulador button2:

    // Comments in the code for button2 are the same
    // as for button1.
    string param = textBox2.Text;
    
    var custquery = db.CustOrderHist(param);
    
    string msg = "";
    foreach (CustOrderHistResult custOrdHist in custquery)
    {
        msg = msg + custOrdHist.ProductName + "\n";
    }
    MessageBox.Show(msg);
    
    param = "";
    textBox2.Text = "";
    

Testando o aplicativo

Agora é hora de testar o aplicativo. Observe que o contato com o repositório de dados limita-se a qualquer ação que os dois procedimentos armazenados podem executar. Essas ações retornarão os produtos para qualquer orderID inserida ou retornarão um histórico do produtos solicitados para qualquer CustomerID inserida.

Para testar o aplicativo

  1. Pressione F5 para iniciar a depuração.

    Form1 aparecerá.

  2. Na caixa Inserir OrderID, digite 10249 e, em seguida, clique em Detalhes do Pedido.

    Uma caixa de mensagem lista os produtos incluídos no pedido 10249.

    Clique em OK para fechar a caixa de mensagens.

  3. Na caixa Inserir CustomerID, digite ALFKI e, em seguida, clique em Histórico de Pedidos.

    Uma caixa de mensagem aparecerá, listando o histórico do pedido do cliente ALFKI.

    Clique em OK para fechar a caixa de mensagens.

  4. Na caixa Inserir OrderID, digite 123 e, em seguida, clique em Detalhes do Pedido.

    Uma caixa de mensagem exibirá "Nenhum resultado".

    Clique em OK para fechar a caixa de mensagens.

  5. No menu Depurar, clique em Parar depuração.

    A sessão de depuração é fechada.

  6. Se você terminou o experimento, clique em Fechar Projeto no menu Arquivo e salve o projeto quando solicitado.

Próximas etapas

Você pode aprimorar esse projeto fazendo algumas alterações. Por exemplo, você pode listar os procedimentos armazenados disponíveis em uma caixa de listagem e fazer com que o usuário selecione os procedimentos que serão executados. Você também pode transmitir a saída dos relatórios para um arquivo de texto.

Confira também