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
Criar uma tabela no banco de dados intrínsecos que contém os parâmetros para o procedimento armazenado.
Em Gerenciador de Soluções, abra o menu de atalho para o nó de Fontes de Dados , e escolha Adicionar Tabela.
Na janela de Propriedades , na caixa de Nome , entre em UpdateEmployeePersonalInfoUpdate.
Observaçã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.
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çã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.
Adicione uma referência à classe de ConfigurationManager .
Em Gerenciador de Soluções, escolha o botão da barra de ferramentas de Mostrar todos os arquivos .
Abra o menu de atalho para o nó de Servidor , escolha Adicionar Referência.
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 .
Na lista de Escreva o código , escolha o método de Inserindo (neste caso, o método de UpdateEmployeePersonalInfoOperations_Inserting ).
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çã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
Em Designer de tela, abra o menu de atalho para o nó de Barra de Comandos da Tela , escolha Adicionar Botão.
Na caixa de diálogo Adicionar Botão , escolha o botão de opção de Novo Método .
Na caixa de texto Nome , entre em UpdateEmployeeInfo.
Observação Você pode substituir um nome que descreve o que o procedimento armazenado faz.
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.
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.
Dica 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
Em Gerenciador de Soluções, abra o menu de atalho para o nó de Propriedades , e então escolha Abrir.
Na guia de Controle de Acesso , escolha o tipo de autenticação para usar se ainda não foi especificado.
Escolha <Add New Permission> o link e em seguida, e entre em UpdatePersonalInfo.
Observação Você pode substituir um nome que descreve o que o procedimento armazenado faz.
Em Gerenciador de Soluções, abra o menu de atalho para sua tabela do procedimento armazenado, e escolha Abrir.
Na lista de Escreva o código , escolha o método de CanInsert .
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