共用方式為


如何:在 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. 開啟 [伺服器] 節點的捷徑功能表,然後選擇 [加入參考]。

    3. 在 [參考管理員] 對話方塊中,展開 [組件] 節點,選取 [Framework] 節點,然後選取 [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 的 ApplicationData,這個程式碼會先建立 DataWorkspace 並建立 [UpdateEmployeePersonalInfoOperation] 。 作業的值是指定,因此,作業可以藉由呼叫 SaveChanges叫用。 這個步驟會觸發對資料庫執行預存程序的中介層 UpdateEmployeePersonalInfoOperations_Inserting 方法。

    提示

    當您呼叫預存程序時,不會重新整理螢幕資料反映變更。若要重新整理畫面,您可以呼叫 Employees.Refresh() 或 DataWorkspace.AdventureWorksData.Employees_Single(operation.EmployeeID) 在按鈕的 Execute 方法的結尾。請注意 Employees.Refresh() 重新整理所有資料錄,因此, Employees_Single 重新整理只指定的項目。

定義預存程序的使用權限。

  1. 在 [方案總管] 中,開啟 [屬性] 節點的捷徑功能表,然後選擇 [開啟]。

  2. 在 [存取控制項] 索引標籤,則為,如果尚未指定,選取要使用的驗證類型。

  3. 選擇連結 [<Add New Permission>] 然後輸入 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 驗證和授權

概念

在程式碼中使用與資料相關的物件