다음을 통해 공유


방법: LightSwitch에서 저장 프로시저 실행

LightSwitch응용 프로그램 서버 계층에서 호출 하 여 SQL Server 데이터베이스에 저장된 프로시저를 실행할 수 있습니다.명령을 실행을 시작 하려면 클라이언트 계층을 만들 수 및 저장된 프로시저에 액세스할 수 있는 컨트롤 권한을 정의할 수 있습니다.

기존 데이터베이스를 여러 다른 종류의 데이터베이스 상호 작용 모듈식 프로그래밍 빠른 실행 등의 장점이 있으므로 저장된 프로시저를 사용 하 고 네트워크 트래픽이 줄어듭니다.이러한 장점에 동일한 저장된 프로시저에서 실행 하도록 적용 하 여 LightSwitch 응용 프로그램입니다.

AdventureWorks 샘플 데이터베이스에서 uspUpdateEmployeePersonalInfo 저장 프로시저를 다음 절차를 따릅니다.

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;

다른 저장된 프로시저를 실행 하려면 이름과 일치 하는 매개 변수를 변경 해야 합니다.

저장된 프로시저를 실행 하려면

  1. 저장된 프로시저의 입력된 매개 변수를 포함 하 여 내장 데이터베이스에 테이블을 만듭니다.

    1. 솔루션 탐색기, 바로 가기 메뉴를 엽니다의 데이터 원본 노드를 클릭 하 고 다음을 선택 테이블 추가.

    2. 속성 창에서의 이름 상자에 입력 UpdateEmployeePersonalInfoUpdate.

      [!참고]

      일반적으로 바꾸려는 UpdateEmployeePersonalInfoOperation 예: "작업"에이 테이블에 저장된 프로시저를 사용 하는 식별자와 실행할 저장된 프로시저의 이름입니다.

    3. 다음 필드를 테이블에 추가 합니다.

      이름

      형식

      필수

      EmployeeID

      Integer

      NationalIDNumber

      문자열

      생년월일

      날짜 시간

      MaritalStatus

      문자열

      성별

      문자열

      [!참고]

      이름유형 필수 필드, 값 이름 및 데이터 형식 각각에 대 한 입력 매개 변수를 저장 프로시저에서 및으로 모든 필드가 표시 되도록 바꾸기.

  2. 참조를 추가 ConfigurationManager 클래스입니다.

    1. 솔루션 탐색기, 선택은 모든 파일 표시 도구 모음 단추입니다.

    2. 바로 가기 메뉴를 엽니다의 Server 노드를 다음 선택 참조 추가.

    3. 참조 관리자 대화 상자에서 확장의 어셈블리 노드를 선택의 프레임 워크 노드를 선택한 다음 선택의 System.Configuration 확인란을 선택 합니다.

  3. 코드 작성 목록에서 선택의 삽입 메서드 (이 경우는 UpdateEmployeePersonalInfoOperations_Inserting 메서드).

  4. 다음 예제와 유사한 코드를 추가 합니다.

    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();
        }
    }
    

    이 코드는 SqlConnection 개체 및 web.config 파일에서 연결 문자열을 가져옵니다.다음 코드를 만드는 한 SqlCommand 개체는 필수 명령 텍스트와 매개 변수 값을 추가 하 고 명령을 실행 합니다.마지막으로 DiscardChanges 이라고 합니다. 변경 내용을 저장할 필요가 없습니다에서 UpdateEmployeePersonalInfoOperation 테이블.

    [!참고]

    바꿔야는 DataWorkspace 저장 프로시저 이름 및 매개 변수 이름 및 값에 대 한 자신의.

화면에서 저장된 프로시저를 호출 하려면

  1. 화면 디자이너, 바로 가기 메뉴를 엽니다의 화면 명령 모음 노드를 클릭 하 고 다음을 선택 추가 단추.

  2. 추가 단추 대화 상자에서 선택 된 새 메서드 옵션 단추.

  3. 이름 텍스트 상자에 입력 UpdateEmployeeInfo.

    [!참고]

    저장된 프로시저의 역할에 대해 설명 하는 이름을 바꿀 수 있습니다.

  4. 화면 디자이너단추 노드에 대 한 바로 가기 메뉴를 열고 선택 실행 코드 편집.

  5. 다음 예제와 유사한 코드를 추가 합니다.

    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();
    }
    

    이 코드에서는 먼저 만듭니다는 DataWorkspace 만들고 다음에 UpdateEmployeePersonalInfoOperation 는 새로 만든된 Dataworkspace를 사용 하 여 ApplicationData.값에 대 한 작업을 배정 하 고 작업을 호출 하 여 호출 SaveChanges.이 단계는 중간 계층 트리거 UpdateEmployeePersonalInfoOperations_Inserting 데이터베이스에 저장된 프로시저를 실행 하는 방법.

    팁

    화면 데이터를 새로 저장된 프로시저를 호출 하면 변경 내용이 반영 되지 않습니다.화면을 새로 고치려면 호출 수 Employees.Refresh() 또는 DataWorkspace.AdventureWorksData.Employees_Single(operation.EmployeeID) 버튼의 끝에 Execute 메서드.이때 Employees.Refresh() 모든 레코드를 새로 고칩니다 및 Employees_Single 사용자가 지정 하는 항목을 새로 고칩니다.

저장된 프로시저에 대 한 사용 권한을 정의 하려면

  1. 솔루션 탐색기, 바로 가기 메뉴를 엽니다의 속성 노드를 클릭 하 고 다음을 선택 열기.

  2. 액세스 제어 탭에서 지정 하지 않은 경우 사용할 인증 유형을 선택 합니다.

  3. 선택의 < 새 권한 추가 > 링크를 누른 다음 입력 하 고 UpdatePersonalInfo.

    [!참고]

    저장된 프로시저의 역할에 대해 설명 하는 이름을 바꿀 수 있습니다.

  4. 솔루션 탐색기테이블, 저장된 프로시저에 대 한 바로 가기 메뉴를 열고 선택 열기.

  5. 코드 작성 목록에서 선택의 CanInsert 메서드.

  6. 다음 예제와 유사한 코드를 추가 합니다.

    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);
    }
    

참고 항목

작업

연습: 저장 프로시저를 사용하여 레코드 업데이트

LightSwitch 인증 및 권한 부여

개념

코드로 데이터 관련 개체 작업