Partilhar via


Como executar um procedimento armazenado no LightSwitch

aplicativos deLightSwitch podem executar procedimentos armazenados em um banco de dados SQL Server chamando os camada de servidor.Você pode criar comandos na camada de cliente acionar a execução, e você pode definir permissões controlar quem tem acesso aos procedimentos armazenados.

O uso de vários bancos de dados existentes procedimentos armazenados como têm vantagens sobre outros tipos de interação de banco de dados como a programação modular, uma execução mais rápida, e o tráfego de rede reduzido.Essas mesmas vantagens se aplicam a executar procedimentos armazenados do seu aplicativo de LightSwitch .

Os procedimentos a seguir usam o procedimento armazenado uspUpdateEmployeePersonalInfo de 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 para corresponder-lo.

Para executar um procedimento armazenado

  1. Criar uma tabela no banco de dados intrínsecos que contém os parâmetros para o procedimento armazenado.

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

    2. Na janela de Propriedades , na caixa de Nome , entre em UpdateEmployeePersonalInfoUpdate.

      ObservaçãoObservação

      Você substituirá normalmente UpdateEmployeePersonalInfoOperation com o nome do procedimento armazenado que você deseja executar mais um identificador tal como “operação” para indicar que esta tabela é usada para um procedimento armazenado.

    3. Adicione os seguintes campos para a tabela:

      Nome

      Tipo

      Necessário

      Código Do Funcionário

      Integer

      Sim

      NationalIDNumber

      Cadeia de caracteres

      Sim

      Data de nascimento

      Tempo de data

      Sim

      MaritalStatus

      Cadeia de caracteres

      Sim

      Género

      Cadeia de caracteres

      Sim

      ObservaçãoObservação

      Em campos de Nome e de Tipo , substitua os valores com os nomes e tipos de dados para cada parâmetro de entrada no procedimento armazenado, e certifique-se de que todos os campos estão marcados como necessário.

  2. Adicione uma referência à classe de ConfigurationManager .

    1. Em Gerenciador de Soluções, escolha o botão da barra de ferramentas de Mostrar todos os arquivos .

    2. Abra o menu de atalho para o nó de Servidor , escolha Adicionar Referência.

    3. Na caixa de diálogo Referenciar o gerenciador , expanda o nó de Assemblies , escolha o nó de Framework , selecione a caixa de seleção System.Configuration .

  3. Na lista de Escreva o código , escolha o método de Inserindo (neste caso, o método de UpdateEmployeePersonalInfoOperations_Inserting ).

  4. Adicione o código que lembra o exemplo a seguir:

    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
    
                Me.Details.DiscardChanges()
            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();
                }
            }
    
            this.Details.DiscardChanges();
        }
    }
    

    Esse código cria um objeto de SqlConnection e obtém a cadeia de conexão no arquivo web.config.O código então cria um objeto de SqlCommand com o texto de comando necessário, adicione os valores de parâmetro, e executa o comando.Finalmente DiscardChanges é chamado; você não precisa salvar as alterações na tabela de UpdateEmployeePersonalInfoOperation .

    ObservaçãoObservação

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

Para chamar o procedimento armazenado de uma tela

  1. Em Designer de tela, abra o menu de atalho para o nó de Barra de Comandos da Tela , escolha Adicionar Botão.

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

  3. Na caixa de texto Nome , entre em UpdateEmployeeInfo.

    ObservaçãoObservação

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

  4. Em Designer de tela, abra o menu de atalho para o nó do botão, e então escolha A edição executa o código.

  5. Adicione o código que lembra o exemplo a seguir:

    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 DataWorkspace e então cria UpdateEmployeePersonalInfoOperation usando ApplicationDatarecém-criado de DataWorkspace.Valores para a operação, e são atribuídos a operação é chamada chamando SaveChanges.Esta etapa ativa o método médio de UpdateEmployeePersonalInfoOperations_Inserting de camada que executa o procedimento armazenado no banco de dados.

    DicaDica

    Os dados de tela não estã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) no final do método de Execute do botão.Observe que Employees.Refresh() atualizar todos os registros, e atualizações de Employees_Single somente o item que você especificar.

Para definir permissões para um procedimento armazenado

  1. Em Gerenciador de Soluções, abra o menu de atalho para o nó de Propriedades , e então escolha Abrir.

  2. Na guia de Controle de Acesso , escolha o tipo de autenticação para usar se ainda não foi especificado.

  3. Escolha <Add New Permission> o link e em seguida, e entre em UpdatePersonalInfo.

    ObservaçãoObservação

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

  4. Em Gerenciador de Soluções, abra o menu de atalho para sua tabela do procedimento armazenado, e escolha Abrir.

  5. Na lista de Escreva o código , escolha o método de CanInsert .

  6. Adicione o código que lembra o exemplo a seguir:

    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

Instruções passo a passo: atualizando relatórios com procedimentos armazenados

Autenticação e autorização do LightSwitch

Conceitos

Trabalhando com objetos relacionados a dados no código