Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Observação
A DataSet classe e as classes relacionadas são tecnologias herdadas do .NET Framework do início dos anos 2000 que permitem que os aplicativos trabalhem com dados na memória enquanto os aplicativos estão desconectados do banco de dados. As tecnologias são especialmente úteis para aplicativos que permitem aos usuários modificar dados e manter as alterações de volta ao banco de dados. Embora os conjuntos de dados sejam uma tecnologia comprovadamente bem-sucedida, a abordagem recomendada para novos aplicativos .NET é usar o Entity Framework Core. O Entity Framework fornece uma maneira mais natural de trabalhar com dados tabulares como modelos de objeto e tem uma interface de programação mais simples.
As ferramentas LINQ to SQL no Visual Studio fornecem uma superfície de design visual para criar e editar classes LINQ to SQL (classes de entidade) baseadas em objetos em um banco de dados. Usando LINQ to SQL, você pode usar a tecnologia LINQ para acessar bancos de dados SQL. Para obter mais informações, consulte LINQ (Language Integrated Query).
Por padrão, a lógica para executar atualizações é fornecida pelo tempo de execução do LINQ to SQL. O tempo de execução cria instruções padrão Insert, Updatee Delete com base no esquema da tabela (as definições de coluna e informações de chave primária). Quando não quiser usar o comportamento padrão, você pode configurar o comportamento de atualização e designar procedimentos armazenados específicos para executar as inserções, atualizações e exclusões necessárias para trabalhar com os dados no banco de dados. Você também pode fazer isso quando o comportamento padrão não é gerado, por exemplo, quando suas classes de entidade são mapeadas para exibições. Além disso, você pode substituir o comportamento de atualização padrão quando o banco de dados requer acesso à tabela por meio de procedimentos armazenados. Para obter mais informações, consulte Personalizando operações usando procedimentos armazenados.
Observação
Este passo a passo requer a disponibilidade dos procedimentos armazenados InsertCustomer, UpdateCustomer e DeleteCustomer para o banco de dados Northwind.
Este passo a passo fornece as etapas que você deve seguir para substituir o comportamento padrão de tempo de execução LINQ to SQL para salvar dados de volta em um banco de dados usando procedimentos armazenados.
Durante este passo a passo, você aprenderá a executar as seguintes tarefas:
Crie um novo aplicativo Windows Forms e adicione um arquivo LINQ to SQL a ele.
Crie uma classe de entidade que seja mapeada para a tabela Northwind
Customers.Crie uma fonte de dados de objeto que faça referência à classe LINQ to SQL
Customer.Crie um Windows Form que contenha um DataGridView que esteja vinculado à
Customerclasse.Implemente a funcionalidade de salvar para o formulário.
Crie DataContext métodos adicionando procedimentos armazenados ao O/R Designer.
Configure a
Customerclasse para usar procedimentos armazenados para executar inserções, atualizações e exclusões.
Pré-requisitos
Este passo a passo usa o SQL Server Express LocalDB e o banco de dados de exemplo Northwind.
Se você não tiver o SQL Server Express LocalDB, instale-o na página de download do SQL Server Express ou por meio do Visual Studio Installer. No Visual Studio Installer, você pode instalar o SQL Server Express LocalDB como parte do Armazenamento e processamento de dados carga de trabalho ou como um componente individual.
Instale o banco de dados de exemplo Northwind seguindo estas etapas:
No Visual Studio, abra a janela do Pesquisador de Objetos do SQL Server. (O Pesquisador de Objetos do SQL Server é instalado como parte da carga de trabalho de armazenamento e processamento de dados no Visual Studio Installer.) Expanda o nó SQL Server. Clique com o botão direito do mouse em sua instância LocalDB e selecione New Query.
Uma janela do editor de consultas é aberta.
Copie o script Northwind Transact-SQL para a área de transferência. Este script T-SQL cria o banco de dados Northwind do zero e o preenche com dados.
Cole o script T-SQL no editor de consultas e depois escolha o botão Executar.
Após um curto período de tempo, a consulta termina de ser executada e o banco de dados Northwind é criado.
Criando um aplicativo e adicionando LINQ a classes SQL
Como você está trabalhando com classes LINQ to SQL e exibindo os dados em um Windows Form, crie um novo aplicativo Windows Forms e adicione um arquivo LINQ to SQL Classes.
Observação
As instruções neste artigo ilustram a versão mais recente da experiência de desenvolvimento interativo (IDE) disponível no Visual Studio. Seu computador pode mostrar nomes ou locais diferentes para alguns dos elementos da interface do usuário. Você pode estar usando uma versão diferente do Visual Studio ou configurações de ambiente diferentes. Para obter mais informações, consulte Personalizar o IDE.
Para criar um novo projeto de aplicativo do Windows Forms que contém classes LINQ to SQL
No Visual Studio, no menu Ficheiro, selecione Novo>Projeto.
Expanda Visual C# ou Visual Basic no painel esquerdo e, em seguida, selecione Windows Desktop.
No painel central, selecione o tipo de projeto Windows Forms App .
Nomeie o projeto UpdatingWithSProcsWalkthrough e escolha OK.
O projeto UpdatingWithSProcsWalkthrough é criado e adicionado ao Gerenciador de Soluções.
No menu Projeto, clique em Adicionar Novo Item.
Clique no modelo LINQ to SQL Classes e digite Northwind.dbml na caixa Nome .
Clique em Adicionar.
Um arquivo LINQ to SQL Classes vazio (Northwind.dbml) é adicionado ao projeto e o O/R Designer é aberto.
Criar a classe de entidade Customer e a fonte de dados do objeto
Crie classes LINQ to SQL que são mapeadas para tabelas de banco de dados arrastando tabelas do Server Explorer ou Database Explorer para o O/R Designer. O resultado são classes de entidade LINQ to SQL que fazem o mapeamento para as tabelas na base de dados. Depois de criar classes de entidade, elas podem ser usadas como fontes de dados de objeto assim como outras classes que têm propriedades públicas.
Para criar uma classe de entidade Customer e configurar uma fonte de dados com ela
No Gerenciador de Servidores ou no Gerenciador de Banco de Dados, localize a tabela Customer na versão do SQL Server do banco de dados de exemplo Northwind.
Arraste o nó Clientes do Explorador de Servidores ou Explorador de Base de Dados para a superfície do O/R Designer.
Uma classe de entidade chamada Customer é criada. Tem propriedades que correspondem às colunas na tabela Clientes. A classe de entidade é denominada Cliente (não Clientes) porque representa um único cliente da tabela Clientes.
Observação
Esse comportamento de renomeação é chamado de pluralização. Ele pode ser ativado ou desativado na caixa de diálogo Opções. Para obter mais informações, consulte Como ativar e desativar a pluralização (O/R Designer).
No menu Build , clique em Build UpdatingwithSProcsWalkthrough para criar o projeto.
Para abrir a janela Fontes de Dados , no menu Dados , clique em Mostrar Fontes de Dados.
Na janela Fontes de Dados, clique em Adicionar Nova Fonte de Dados.
Clique em Objeto na página Escolher um Tipo de Fonte de Dados e selecione Avançar.
Expanda o nó UpdatingwithSProcsWalkthrough e encontre e selecione a classe Customer.
Observação
Se a classe Customer não estiver disponível, cancele o assistente, crie o projeto e execute o assistente novamente.
Clique em Concluir para criar a fonte de dados e adicionar a classe de entidade Customer à janela Fontes de Dados .
Criar um DataGridView para exibir os dados do cliente em um Windows Form
Crie controlos ligados a classes de entidade arrastando itens da fonte de dados LINQ to SQL da janela Fontes de Dados para um Windows Form.
Para adicionar controles vinculados às classes de entidade
Abra o Formulário1 no modo de Design.
A partir da janela Fontes de Dados, arraste o nó Cliente para Form1.
Observação
Para exibir a janela Fontes de Dados , clique em Mostrar Fontes de Dados no menu Dados .
Abra o Form1 no Editor de Códigos .
Adicione o seguinte código ao formulário, global ao formulário, fora de qualquer método específico, mas dentro da
Form1classe:Crie um manipulador de eventos para o
Form_Loadevento e adicione o seguinte código ao manipulador:
Implementar a funcionalidade de gravação
Por padrão, o botão Salvar não está habilitado e a funcionalidade de salvar não é implementada. Além disso, o código não é adicionado automaticamente para salvar dados alterados no banco de dados quando controles ligados a dados são criados para fontes de dados de objeto. Esta seção explica como habilitar o botão salvar e implementar a funcionalidade de salvamento para objetos LINQ to SQL.
Para implementar a funcionalidade de salvar
Abra o Formulário1 no modo de Design.
Selecione o botão Salvar no CustomerBindingNavigator (o botão com o ícone do disquete).
Na janela Propriedades , defina a propriedade Enabled como True.
Clique duas vezes no botão Salvar para criar um manipulador de eventos e alternar para o Editor de Códigos.
Adicione o seguinte código ao manipulador de eventos do botão salvar:
Substituir o comportamento padrão para realizar operações de atualização (inserção, atualização e exclusão)
Para substituir o comportamento de atualização padrão
Abra o arquivo LINQ to SQL no O/R Designer. (Clique duas vezes no arquivo Northwind.dbml no Gerenciador de Soluções.)
No Explorador de Servidores ou no Explorador de Bases de Dados, expanda o nó Procedimentos Armazenados das bases de dados Northwind e localize os procedimentos armazenados InsertCustomers, UpdateCustomers e DeleteCustomers.
Arraste os três procedimentos armazenados para o O/R Designer.
Os procedimentos armazenados são adicionados ao painel de métodos como DataContext métodos. Para mais informações, consulte os métodos DataContext (O/R Designer) .
Selecione a classe de entidade Customer no O/R Designer.
Na janela Propriedades , selecione a propriedade Inserir .
Clique nas reticências (...) ao lado de Utilizar Runtime para abrir a caixa de diálogo Configurar Comportamento.
Selecione Personalizar.
Selecione o método InsertCustomers na lista Personalizar .
Clique em Aplicar para salvar a configuração da Classe e do Comportamento selecionados.
Observação
Você pode continuar a configurar o comportamento para cada combinação de classe/comportamento, desde que clique em Aplicar depois de fazer cada alteração. Se você alterar a classe ou o comportamento antes de clicar em Aplicar, será exibida uma caixa de diálogo de aviso com a oportunidade de aplicar quaisquer alterações.
Selecione Atualizar na lista Comportamento .
Selecione Personalizar.
Selecione o método UpdateCustomers na lista Personalizar .
Inspecione a lista de Argumentos de Método e Propriedades de Classe e observe que há dois Argumentos de Método e duas Propriedades de Classe para algumas colunas na tabela. Isso facilita o controle de alterações e a criação de instruções que verificam violações de concorrência.
Mapeie o argumento do método Original_CustomerID para a propriedade da classe CustomerID (Original ).
Observação
Por padrão, os argumentos de método serão mapeados para propriedades de classe quando os nomes corresponderem. Se os nomes de propriedade forem alterados e não corresponderem mais entre a tabela e a classe de entidade, talvez seja necessário selecionar a propriedade de classe equivalente para mapear se o O/R Designer não puder determinar o mapeamento correto. Além disso, se os argumentos de método não tiverem propriedades de classe válidas para serem mapeadas, você poderá definir o valor Propriedades de classe como (Nenhum).
Clique em Aplicar para salvar a configuração da Classe e do Comportamento selecionados.
Selecione Excluir na lista Comportamento .
Selecione Personalizar.
Selecione o método DeleteCustomers na lista Personalizar .
Mapeie o argumento do método Original_CustomerID para a propriedade da classe CustomerID (Original ).
Clique em OK.
Observação
Embora não seja um problema para este passo a passo específico, vale a pena notar que o LINQ to SQL manipula valores gerados por banco de dados automaticamente para identidade (incremento automático), rowguidcol (identificador global exclusivo (GUID) gerado por banco de dados) e colunas de carimbo de data/hora durante inserções e atualizações. Os valores gerados pelo banco de dados em outros tipos de coluna resultarão inesperadamente em um valor nulo. Para retornar os valores gerados pelo banco de dados, você deve definir IsDbGenerated manualmente como true e AutoSync para um dos seguintes: AutoSync.Always, AutoSync.OnInsert ou AutoSync.OnUpdate.
Testar a aplicação
Execute o aplicativo novamente para verificar se o procedimento armazenado UpdateCustomers atualiza corretamente o registro do cliente no banco de dados.
Pressione F5.
Modifique um registro na grade para testar o comportamento de atualização.
Adicione um novo registro para testar o comportamento de inserção.
Clique no botão Salvar para salvar as alterações de volta no banco de dados.
Feche o formulário.
Pressione F5 e verifique se o registro atualizado e o registro recém-inserido persistiram.
Exclua o novo registro criado na etapa 3 para testar o comportamento de exclusão.
Clique no botão Salvar para enviar as alterações e remover o registro excluído do banco de dados.
Feche o formulário.
Pressione F5 e verifique se o registro excluído foi removido do banco de dados.
Observação
Se seu aplicativo usa o SQL Server Express Edition, dependendo do valor da propriedade Copy to Output Directory do arquivo de banco de dados, as alterações podem não aparecer quando você pressionar F5 na etapa 10.
Próximos passos
Dependendo dos requisitos do seu aplicativo, há várias etapas que você pode querer executar depois de criar classes de entidade LINQ to SQL. Alguns aprimoramentos que você pode fazer para este aplicativo incluem o seguinte:
Implemente a verificação de simultaneidade durante as atualizações. Para obter informações, consulte Simultaneidade otimista: visão geral.
Adicione consultas LINQ para filtrar dados. Para obter informações, consulte Introdução às consultas LINQ (C#).