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
Crie uma tabela no banco de dados intrínseco que contém os parâmetros de entrada do procedimento armazenado.
No Gerenciador de Soluções, abra o menu de atalho do nó Fontes de Dados e escolha Adicionar Tabela.
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.
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.
Adicione uma referência à classe ConfigurationManager.
No Gerenciador de Soluções, abra o menu de atalho do nó Servidor e escolha Adicionar Referência.
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.
Na lista Gravar Código, escolha o método Inserção (neste caso, o método UpdateEmployeePersonalInfoOperations_Inserting).
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
No Designer de Tela, abra o menu de atalho do nó Barra de Comandos da Tela e escolha Adicionar Botão.
Na caixa de diálogo Adicionar Botão, escolha o botão de opção Novo Método.
Na caixa de texto Nome, insira UpdateEmployeeInfo.
Dica
Você pode substituir um nome que descreve o que o procedimento armazenado faz.
No Designer de Tela, abra o menu de atalho do botão do nó e escolha Editar Código de Execução.
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
No Gerenciador de Soluções, abra o menu de atalho do nó Propriedades e, em seguida, escolha Abrir.
Na guia Controle de Acesso, escolha o tipo de autenticação a ser usado, caso ainda não tenha sido especificado.
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.
No Gerenciador de Soluções, abra o menu de atalho da tabela de procedimentos armazenados e escolha Abrir.
Na lista Gravar Código, escolha o método CanInsert.
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