Partilhar via


Como executar um procedimento armazenado no LightSwitch

Os aplicativos LightSwitch podem executar procedimentos armazenados em um banco de dados do SQL Server chamando-os na camada de servidor. Você pode criar comandos na camada de cliente para disparar a execução, além de definir permissões para controlar quem tem acesso aos procedimentos armazenados.

Vários bancos de dados existentes usam procedimentos armazenados porque têm vantagens sobre outros tipos de interação de banco de dados como a programação modular, a execução mais rápida e o tráfego de rede reduzido. Essas mesmas vantagens se aplicam à execução de procedimentos armazenados com base em seu aplicativo LightSwitch.

Os seguintes procedimentos usam o procedimento armazenado uspUpdateEmployeePersonalInfo do banco de dados de exemplo AdventureWorks:

CREATE PROCEDURE [HumanResources].[uspUpdateEmployeePersonalInfo]
@EmployeeID [int], 
@NationalIDNumber [nvarchar](15), 
@BirthDate [datetime], 
@MaritalStatus [nchar](1), 
@Gender [nchar](1)
WITH EXECUTE AS CALLER
AS
BEGIN
SET NOCOUNT ON;
UPDATE [HumanResources].[Employee] 
SET [NationalIDNumber] = @NationalIDNumber 
,[BirthDate] = @BirthDate 
,[MaritalStatus] = @MaritalStatus 
,[Gender] = @Gender 
WHERE [EmployeeID] = @EmployeeID;
END;

Para executar um procedimento armazenado diferente, você deve alterar os nomes e os parâmetros de acordo.

Para executar um procedimento armazenado

  1. Crie uma tabela no banco de dados intrínseco que contém os parâmetros de entrada do procedimento armazenado.

    1. No Gerenciador de Soluções, abra o menu de atalho do nó Fontes de Dados e escolha Adicionar Tabela.

    2. Na janela Propriedades, na caixa de texto Nome, insira UpdateEmployeePersonalInfoOperation.

      Dica

      Você normalmente substitui UpdateEmployeePersonalInfoOperation pelo nome do procedimento armazenado que deseja executar mais um identificador, como “Operation”, para indicar que essa tabela é usada em um procedimento armazenado.

    3. Adicione os seguintes campos à tabela:

      Nome

      Tipo

      Obrigatório

      EmployeeID

      Inteiro

      Sim

      NationalIDNumber

      Cadeia de caracteres

      Sim

      BirthDate

      Date Time

      Sim

      MaritalStatus

      Cadeia de caracteres

      Sim

      Gender

      Cadeia de caracteres

      Sim

      Dica

      Nos campos Nome e Tipo, substitua os valores pelos nomes e tipos de dados de cada parâmetro de entrada no procedimento armazenado e certifique-se de que todos os campos estejam marcados conforme necessário.

  2. Adicione uma referência à classe ConfigurationManager.

    1. No Gerenciador de Soluções, abra o menu de atalho do nó Servidor e escolha Adicionar Referência.

    2. Na caixa de diálogo Gerenciador de Referências, expanda o nó Assemblies, selecione o nó Estrutura e marque a caixa de seleção System.Configuration.

  3. Na lista Gravar Código, escolha o método Inserção (neste caso, o método UpdateEmployeePersonalInfoOperations_Inserting).

  4. Adicione um código semelhante ao seguinte exemplo:

    Imports System.Configuration
    Imports System.Data
    Imports System.Data.SqlClient
    
    Namespace LightSwitchApplication
        Public Class ApplicationDataService
            Private Sub UpdateEmployeePersonalInfoOperations_Inserting(entity As UpdateEmployeePersonalInfoOperation)
                Using connection = New SqlConnection
                    Dim connectionStringName = Me.DataWorkspace.AdventureWorksData.Details.Name
                    connection.ConnectionString =
                        ConfigurationManager.ConnectionStrings(connectionStringName).ConnectionString
    
                    Dim procedure = "HumanResources.uspUpdateEmployeePersonalInfo"
                    Using command = New SqlCommand(procedure, connection)
                        command.CommandType = CommandType.StoredProcedure
    
                        command.Parameters.Add(
                            New SqlParameter("@EmployeeID", entity.EmployeeID))
                        command.Parameters.Add(
                            New SqlParameter("@NationalIDNumber", entity.NationalIDNumber))
                        command.Parameters.Add(
                            New SqlParameter("@BirthDate", entity.BirthDate))
                        command.Parameters.Add(
                            New SqlParameter("@MaritalStatus", entity.MaritalStatus))
                        command.Parameters.Add(
                            New SqlParameter("@Gender", entity.Gender))
    
                        connection.Open()
                        command.ExecuteNonQuery()
                    End Using
                End Using
            End Sub
        End Class
    End Namespace
    
    using System.Configuration;
    using System.Data;
    using System.Data.SqlClient;
    
    public partial class ApplicationDataService
    {
        partial void UpdateEmployeePersonalInfoOperations_Inserting(UpdateEmployeePersonalInfoOperation entity)
        {
            using (SqlConnection connection = new SqlConnection())
            {
                string connectionStringName = this.DataWorkspace.AdventureWorksData.Details.Name;
                connection.ConnectionString =
                    ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString;
    
                string procedure = "HumanResources.uspUpdateEmployeePersonalInfo";
                using (SqlCommand command = new SqlCommand(procedure, connection))
                {
                    command.CommandType = CommandType.StoredProcedure;
    
                    command.Parameters.Add(
                        new SqlParameter("@EmployeeID", entity.EmployeeID));
                    command.Parameters.Add(
                        new SqlParameter("@NationalIDNumber", entity.NationalIDNumber));
                    command.Parameters.Add(
                        new SqlParameter("@BirthDate", entity.BirthDate));
                    command.Parameters.Add(
                        new SqlParameter("@MaritalStatus", entity.MaritalStatus));
                    command.Parameters.Add(
                        new SqlParameter("@Gender", entity.Gender));
    
                    connection.Open();
                    command.ExecuteNonQuery();
                }
            }
        }
    }
    

    Esse código cria um objeto SqlConnection e obtém a cadeia de conexão do arquivo Web.config. Assim, o código cria um objeto SqlCommand com o texto de comando necessário, adiciona os valores de parâmetro e executa o comando. Por fim, DiscardChanges é chamado; você não precisa salvar as alterações feitas na tabela UpdateEmployeePersonalInfoOperation.

    Dica

    Você deve substituir o nome DataWorkspace e os nomes e valores de parâmetro por aqueles de seu próprio procedimento armazenado.

Para invocar o procedimento armazenado em uma tela

  1. No Designer de Tela, abra o menu de atalho do nó Barra de Comandos da Tela e escolha Adicionar Botão.

  2. Na caixa de diálogo Adicionar Botão, escolha o botão de opção Novo Método.

  3. Na caixa de texto Nome, insira UpdateEmployeeInfo.

    Dica

    Você pode substituir um nome que descreve o que o procedimento armazenado faz.

  4. No Designer de Tela, abra o menu de atalho do botão do nó e escolha Editar Código de Execução.

  5. Adicione um código semelhante ao seguinte exemplo:

    Private Sub UpdateEmployeeInfo_Execute()
        Dim dataWorkspace = New DataWorkspace
        Dim employee = Me.Employees.SelectedItem
    
        Dim operation =
            dataWorkspace.ApplicationData.UpdateEmployeePersonalInfoOperations.AddNew()
        operation.EmployeeID = employee.EmployeeID
        operation.NationalIDNumber = employee.NationalIDNumber
        operation.BirthDate = employee.BirthDate
        operation.MaritalStatus = employee.MaritalStatus
        operation.Gender = employee.Gender
    
        dataWorkspace.ApplicationData.SaveChanges()
    End Sub
    
    partial void UpdateEmployeeInfo_Execute()
    {
        DataWorkspace dataWorkspace = new DataWorkspace();
        Employee employee = this.Employees.SelectedItem;
    
        UpdatePersonalInfoOperation operation = 
            dataWorkspace.ApplicationData.UpdateEmployeePersonalInfoOperations.AddNew();
        operation.EmployeeID = employee.EmployeeID;
        operation.NationalIDNumber = employee.NationalIDNumber;
        operation.BirthDate = employee.BirthDate;
        operation.MaritalStatus = employee.MaritalStatus;
        operation.Gender = employee.Gender;
    
        dataWorkspace.ApplicationData.SaveChanges();
    }
    

    Esse código cria primeiro um DataWorkspace e depois um UpdateEmployeePersonalInfoOperation usando o ApplicationData do DataWorkspace recém-criado. Os valores da operação são atribuídos e a operação é invocada chamando-se SaveChanges. Esta etapa ativa o método UpdateEmployeePersonalInfoOperations_Inserting da camada intermediária que executa o procedimento armazenado no banco de dados.

    Dica

    Os dados da tela não são atualizados para refletir as alterações quando você chama o procedimento armazenado.Para atualizar a tela, você pode chamar Employees.Refresh() ou DataWorkspace.AdventureWorksData.Employees_Single(operation.EmployeeID) ao final do método Execute do botão.Observe que Employees.Refresh() atualiza todos os registros e que Employees_Single atualiza somente o item especificado por você.

Para definir permissões para um procedimento armazenado

  1. No Gerenciador de Soluções, abra o menu de atalho do nó Propriedades e, em seguida, escolha Abrir.

  2. Na guia Controle de Acesso, escolha o tipo de autenticação a ser usado, caso ainda não tenha sido especificado.

  3. Escolha o < adicionar nova permissão > link e, em seguida e digite UpdatePersonalInfo.

    Dica

    Você pode substituir um nome que descreve o que o procedimento armazenado faz.

  4. No Gerenciador de Soluções, abra o menu de atalho da tabela de procedimentos armazenados e escolha Abrir.

  5. Na lista Gravar Código, escolha o método CanInsert.

  6. Adicione um código semelhante ao seguinte exemplo:

    Private Sub UpdateEmployeePersonalInfoOperations_CanInsert(ByRef result As Boolean)
        result = Me.Application.User.HasPermission(Permissions.UpdatePersonalInfo)
    End Sub
    
    partial void UpdateEmployeePersonalInfoOperations_CanInsert(ref bool result)
    {
        result = this.Application.User.HasPermission(Permissions.UpdatePersonalInfo);
    }
    

Consulte também

Tarefas

Passo a passo: usando procedimentos armazenados

Como habilitar a autenticação em um aplicativo cliente do Silverlight

Conceitos

Trabalhando objetos relacionados a dados em código