Postupy: Provedení uložené procedury v aplikaci LightSwitch
LightSwitchaplikace lze spustit uložené procedury v databázi serveru SQL Server voláním z úrovně serveru.Můžete vytvořit příkazy na vrstvě klienta spustit spuštění a definovat oprávnění určit, kdo má přístup k uložené procedury.
Mnoho existujících databází pomocí uložené procedury, protože mohou být výhodnější, než jiné typy interakce databáze například modulární programování, rychlejší spuštění a snižuje provoz v síti.Tyto stejné výhody platí pro provádění uložené procedury z vaší LightSwitch aplikace.
Následující postupy pomocí uspUpdateEmployeePersonalInfo uložené procedury z ukázkové databáze 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;
K provedení různých uloženou proceduru, musíte změnit názvy a parametry odpovídající.
Chcete-li spustit uložené procedury
Vytvoření tabulky v vnitřní databáze, která obsahuje vstupní parametry pro uloženou proceduru.
V Průzkumníku, otevřete místní nabídku pro Zdroje dat uzlu a pak zvolte Přidat tabulku.
V Vlastnosti okno, v jméno zadejte UpdateEmployeePersonalInfoUpdate.
[!POZNÁMKA]
Obvykle nahradí UpdateEmployeePersonalInfoOperation s názvem uložené procedury, která má být proveden plus identifikátor, například "Operace" označuje, že tato tabulka se používá pro uloženou proceduru.
Přidejte následující pole v tabulce:
Název
Type
Požadováno
Číslo zaměstnance
Integer
Ano
NationalIDNumber
Řetězec
Ano
Datum narození
Datum čas
Ano
MaritalStatus
Řetězec
Ano
Pohlaví
Řetězec
Ano
[!POZNÁMKA]
V název a typu pole nahradit hodnoty s názvy a datové typy pro každý vstupní parametr v uložené proceduře a zajistí, že všechna pole jsou označena jako požadované.
Přidat odkaz ConfigurationManager třídy.
V Průzkumníku, zvolte Zobrazit všechny soubory tlačítko na panelu nástrojů.
Otevření místní nabídky pro Server uzlu a pak zvolte Přidat odkaz na.
V Reference Manager dialogové okno pole, rozbalte položku sestavení uzel, zvolte Framework uzel a pak vyberte System.Configuration políčko.
V Psát kód seznam, zvolte Vložení metody (v tomto případě UpdateEmployeePersonalInfoOperations_Inserting metoda).
Přidejte kód, který se podobá následujícímu příkladu:
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(); } }
Tento kód vytvoří SqlConnection objektu a získá připojovací řetězec ze souboru web.config.Kód poté vytvoří SqlCommand objekt s textem požadovaný příkaz přidá hodnoty parametrů a provede příkaz.Nakonec DiscardChanges se nazývá; není třeba ukládat změny v UpdateEmployeePersonalInfoOperation tabulky.
[!POZNÁMKA]
Je třeba nahradit DataWorkspace jméno a názvy parametrů a hodnoty s hodnotami pro své vlastní uložené procedury.
Chcete-li vyvolat uložená procedura z obrazovky
V Návrhář obrazovky, otevřete místní nabídku pro Obrazovky příkazového řádku uzlu a pak zvolte Přidat tlačítko.
V Přidat tlačítko dialogové okno pole, zvolte Novou metodu přepínač.
V jméno text zadejte UpdateEmployeeInfo.
[!POZNÁMKA]
Můžete použít název, který popisuje, co dělá uložené procedury.
V Návrhář obrazovky, otevřete místní nabídku pro uzel tlačítko a poté zvolte Upravit kód spustit.
Přidejte kód, který se podobá následujícímu příkladu:
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(); }
Tento kód nejprve vytvoří DataWorkspace a vytvoří UpdateEmployeePersonalInfoOperation pomocí nově vytvořené DataWorkspace ApplicationData.Jsou přiřazeny hodnoty pro operace a operace je vyvolána voláním SaveChanges.Tento krok spustí střední vrstvy UpdateEmployeePersonalInfoOperations_Inserting metodu, která provede uloženou proceduru v databázi.
Tip
Data obrazovky není aktualizována tak, aby odrážely změny při volání uložené procedury.Chcete-li aktualizovat obrazovku, můžete buď volání Employees.Refresh() nebo DataWorkspace.AdventureWorksData.Employees_Single(operation.EmployeeID) na konci na tlačítko Execute metoda.Všimněte si, že Employees.Refresh() obnoví všechny záznamy a Employees_Single aktualizuje pouze zboží, které určíte.
Chcete-li definovat oprávnění pro uložené procedury
V Průzkumníku, otevřete místní nabídku pro Vlastnosti uzlu a pak zvolte otevřete.
V Řízení přístupu , vyberte typ ověřování použít, pokud je již nejsou určeny.
Zvolte < přidat nové oprávnění > odkaz a poté a zadejte UpdatePersonalInfo.
[!POZNÁMKA]
Můžete použít název, který popisuje, co dělá uložené procedury.
V Průzkumníku, otevřete místní nabídku pro tabulky uložené procedury a potom zvolte otevřete.
V Psát kód seznam, zvolte CanInsert metoda.
Přidejte kód, který se podobá následujícímu příkladu:
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); }
Viz také
Úkoly
Postupy: Aktualizace záznamů pomocí uložené procedury
Ověřování a autorizace v aplikacích LightSwitch