次の方法で共有


チュートリアル : ストアド プロシージャの使用

LightSwitch から直接 SQL Server データベース内のストアド プロシージャを呼び出すことはできませんが、ストアド プロシージャのパラメーターが含まれている LightSwitch アプリにローカル テーブルを作成し、サーバー層イベントからストアド プロシージャを呼び出すことができます。 このチュートリアルでは、ストアド プロシージャを使用して SQL データベースに顧客レコードを挿入する方法について説明します。

多くのデータベース管理者は、テーブルへの直接アクセスを許可せず、代わりに読み取り専用のビューを公開し、レコードの挿入、更新、および削除のためのストアド プロシージャを提供します。 LightSwitch はストアド プロシージャを認識しないので、レコードの更新をストアド プロシージャに依存するデータベースは使用できないように思えるかもしれません。 しかし、追加の作業を少し行うと、それらのデータベースを LightSwitch から使用できます。

必須コンポーネント

このチュートリアルでは、Northwind サンプル データベースを使用します。

ストアド プロシージャの作成

ほとんどの場合、アクセス対象のストアド プロシージャは、既にデータベースに存在しています。 Northwind データベースには、顧客レコードの挿入に必要なストアド プロシージャがないため、それを追加する必要があります。

ストアド プロシージャを追加するには

  1. メニュー バーで [表示][SQL Server オブジェクト エクスプローラー] を選択します。

  2. [SQL Server オブジェクト エクスプローラー] ウィンドウで [NORTHWIND] データベース ノードを展開し、[プログラミング] を選択します。

  3. [プログラミング] ノードを展開し、[ストアド プロシージャ] を選択します。

  4. [ストアド プロシージャ] のショートカット メニューを開き、[新しいストアド プロシージャの追加] を選択します。

  5. コード エディターで内容を次の Transact-SQL コードに置き換えて、[更新] ボタンを選択します。

    CREATE Procedure [dbo].[InsertCustomer]
        @CustomerID nchar(5),
        @CompanyName nvarchar(40),
        @ContactName nvarchar(30),
        @ContactTitle nvarchar(30),
        @Address nvarchar(60),
        @City nvarchar(15),
        @Region nvarchar(15),
        @PostalCode nvarchar(10),
        @Country nvarchar(15),
        @Phone nvarchar(24),
        @Fax nvarchar(24)
    AS
    INSERT INTO [dbo].[Customers]
               ([CustomerID]
               ,[CompanyName]
               ,[ContactName]
               ,[ContactTitle]
               ,[Address]
               ,[City]
               ,[Region]
               ,[PostalCode]
               ,[Country]
               ,[Phone]
               ,[Fax])
         VALUES
               (@CustomerID
               ,@CompanyName
               ,@ContactName
               ,@ContactTitle
               ,@Address
               ,@City
               ,@Region
               ,@PostalCode
               ,@Country
               ,@Phone
               ,@Fax)
    
  6. [データベース更新のプレビュー] ダイアログ ボックスで、[データベースの更新] をクリックします。

    データベースに InsertCustomer ストアド プロシージャが追加されます。

LightSwitch アプリを作成する

このステップでは、ストアド プロシージャを呼び出し、Northwind データベースに新規顧客を追加するアプリを作成します。

アプリを作成するには

  1. メニュー バーで [ファイル][新規][プロジェクト] の順に選択します。

  2. [新しいプロジェクト] ダイアログ ボックスで、[Visual Basic] ノードまたは [Visual C#] ノードを展開し、[LightSwitch HTML アプリケーション] テンプレートを選択します。

  3. [名前] ボックスに「NorthwindSP」と入力し、[OK] を選択します。

データ ソースを追加するには

  1. ソリューション エクスプローラー[データ ソース] ノードのショートカット メニューを開き、[データ ソースの追加] を選択します。

  2. データ ソースの添付ウィザードで、[データベース][次へ] の順に選択します。

  3. [接続プロパティ] ダイアログ ボックスで、Northwind データベースの接続詳細情報を入力し、[OK] を選択します。

  4. [データベース オブジェクトの選択] ページで、[テーブル] ノードを展開し、[Customers] チェック ボックスをオンにして [完了] を選択します。

ローカル テーブルを追加するには

  1. ソリューション エクスプローラー[Data Sources] ノードのショートカット メニューを開き、[テーブルの追加] を選択します。

  2. [プロパティ] ウィンドウで、[名前] プロパティを選択し、「NewCustomer」と入力します。

  3. エンティティ デザイナーで、次のフィールドを追加します。

    名前

    種類

    必須

    CustomerID

    String

    CompanyName

    String

    ContactName

    String

    ContactTitle

    String

    Address

    String

    City

    String

    Region

    String

    PostalCode

    String

    Country

    String

    電話番号

    電話番号

    Fax

    電話番号

    すべてのフィールドが必須であることに注意してください。 ストアド プロシージャのすべてのパラメーターに値が必要になるためです。 また、Phone フィールドと Fax フィールドのデータ型が Phone Number であることに注意してください。 これらが nvarchar としてデータベースに保存される場合でも、クライアント層の LightSwitch カスタム ビジネス タイプを利用できます。

画面を追加するには

  1. エンティティ デザイナーの [パースペクティブ] バーで [HTMLClient] を選択します。

  2. ツール バーの [画面] を選択します。

  3. [新しい画面の追加] ダイアログ ボックスで、[共通画面セット] テンプレートを選択し、[画面セット名] ボックスに「Customers」と入力し、[画面データ] ボックスの一覧で [NewCustomer] を選択し、[OK] を選択します。

ストアド プロシージャを呼び出すには

  1. ソリューション エクスプローラーで、[NorthwindSP.Server] ノードのショートカット メニューを開き、[追加][参照] の順に選択します。

  2. [参照の追加] ダイアログ ボックスで、[System.Configuration] チェック ボックスをオンにし、[OK] を選択します。

  3. ソリューション エクスプローラー[NewCustomer.lsml] ノードのショートカット メニューを開き、[開く] を選択します。

  4. エンティティ デザイナーの [パースペクティブ] バーで [サーバー] を選択します。

  5. ツール バーで、[コードの記述] ボックスの一覧を展開し、[NewCustomers_Inserting] を選択します。

  6. コード エディターで、既存のコードを次のように書き換えます。

    Imports System.Configuration
    Imports System.Data
    Imports System.Data.SqlClient
    Namespace LightSwitchApplication
    
        Public Class ApplicationDataService
    
            Private Sub NewCustomers_Inserting(entity As NewCustomer)
                Using connection = New SqlConnection
                    Dim connectionStringName = Me.DataWorkspace.NorthwindData.Details.Name
                    connection.ConnectionString = ConfigurationManager.ConnectionStrings(connectionStringName).ConnectionString
    
                    Dim procedure = "dbo.InsertCustomer"
                    Using command = New SqlCommand(procedure, connection)
                        command.CommandType = CommandType.StoredProcedure
    
                        command.Parameters.Add(
                            New SqlParameter("@CustomerID", entity.CustomerID))
                        command.Parameters.Add(
                            New SqlParameter("@CompanyName", entity.CompanyName))
                        command.Parameters.Add(
                            New SqlParameter("@ContactName", entity.ContactName))
                        command.Parameters.Add(
                            New SqlParameter("@ContactTitle", entity.ContactTitle))
                        command.Parameters.Add(
                            New SqlParameter("@Address", entity.Address))
                        command.Parameters.Add(
                            New SqlParameter("@City", entity.City))
                        command.Parameters.Add(
                            New SqlParameter("@Region", entity.Region))
                        command.Parameters.Add(
                            New SqlParameter("@PostalCode", entity.PostalCode))
                        command.Parameters.Add(
                            New SqlParameter("@Country", entity.Country))
                        command.Parameters.Add(
                            New SqlParameter("@Phone", entity.Phone))
                        command.Parameters.Add(
                            New SqlParameter("@Fax", entity.Fax))
    
                        connection.Open()
                        command.ExecuteNonQuery()
                    End Using
    
    
                End Using
            End Sub
        End Class
    
    End Namespace
    
    using Microsoft.VisualBasic;
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Data;
    using System.Diagnostics;
    using System.Configuration;
    using System.Data.SqlClient;
    namespace LightSwitchApplication
    {
    
    public class ApplicationDataService
    {
    
    private void NewCustomers_Inserting(NewCustomer entity)
    {
    using (connection == new SqlConnection()) {
    dynamic connectionStringName = this.DataWorkspace.NorthwindData.Details.Name;
    connection.ConnectionString = ConfigurationManager.ConnectionStrings(connectionStringName).ConnectionString;
    
    dynamic procedure = "dbo.InsertCustomer";
    using (command == new SqlCommand(procedure, connection)) {
    command.CommandType = CommandType.StoredProcedure;
    
    command.Parameters.Add(new SqlParameter("@CustomerID", entity.CustomerID));
    command.Parameters.Add(new SqlParameter("@CompanyName", entity.CompanyName));
    command.Parameters.Add(new SqlParameter("@ContactName", entity.ContactName));
    command.Parameters.Add(new SqlParameter("@ContactTitle", entity.ContactTitle));
    command.Parameters.Add(new SqlParameter("@Address", entity.Address));
    command.Parameters.Add(new SqlParameter("@City", entity.City));
    command.Parameters.Add(new SqlParameter("@Region", entity.Region));
    command.Parameters.Add(new SqlParameter("@PostalCode", entity.PostalCode));
    command.Parameters.Add(new SqlParameter("@Country", entity.Country));
    command.Parameters.Add(new SqlParameter("@Phone", entity.Phone));
    command.Parameters.Add(new SqlParameter("@Fax", entity.Fax));
    
    connection.Open();
    command.ExecuteNonQuery();
    }
    
    
    }
    }
    }
    
    }
    

    NewCustomers テーブルに新しいレコードが挿入されると、このコードが実行されて、Northwind データベースへの接続が開き、InsertCustomer ストアド プロシージャが実行されます。このとき、NewCustomer エンティティの値が InsertCustomer ストアド プロシージャへのパラメーターとして提供されます。

アプリをテストするには

  1. コード エディターで、NewCustomers_Inserting メソッドにブレークポイントを設定します。

  2. アプリを実行し、[CustomersSet] 画面の [追加] を選択します。

  3. [Customers] 画面で、すべてのフィールドに情報を入力し、[保存] を選択します。

    ブレークポイントにヒットします。つまり、コードが動作していることが示されます。F5 キーを押して続行します。 Northwind データベースの Customers テーブルを開くと、新しい顧客のレコードが表示されます。

次の手順

通常どおりに LightSwitch 画面とビジネス ロジックを作成し、ストアド プロシージャを使用して機能するアプリケーションをすばやく簡単に作成できます。

参照

処理手順

方法: LightSwitch でストアド プロシージャを実行する

その他の技術情報

データ: アプリケーションの背景情報