チュートリアル : ストアド プロシージャの使用
LightSwitch から直接 SQL Server データベース内のストアド プロシージャを呼び出すことはできませんが、ストアド プロシージャのパラメーターが含まれている LightSwitch アプリにローカル テーブルを作成し、サーバー層イベントからストアド プロシージャを呼び出すことができます。 このチュートリアルでは、ストアド プロシージャを使用して SQL データベースに顧客レコードを挿入する方法について説明します。
多くのデータベース管理者は、テーブルへの直接アクセスを許可せず、代わりに読み取り専用のビューを公開し、レコードの挿入、更新、および削除のためのストアド プロシージャを提供します。 LightSwitch はストアド プロシージャを認識しないので、レコードの更新をストアド プロシージャに依存するデータベースは使用できないように思えるかもしれません。 しかし、追加の作業を少し行うと、それらのデータベースを LightSwitch から使用できます。
必須コンポーネント
このチュートリアルでは、Northwind サンプル データベースを使用します。
ストアド プロシージャの作成
ほとんどの場合、アクセス対象のストアド プロシージャは、既にデータベースに存在しています。 Northwind データベースには、顧客レコードの挿入に必要なストアド プロシージャがないため、それを追加する必要があります。
ストアド プロシージャを追加するには
メニュー バーで [表示]、[SQL Server オブジェクト エクスプローラー] を選択します。
[SQL Server オブジェクト エクスプローラー] ウィンドウで [NORTHWIND] データベース ノードを展開し、[プログラミング] を選択します。
[プログラミング] ノードを展開し、[ストアド プロシージャ] を選択します。
[ストアド プロシージャ] のショートカット メニューを開き、[新しいストアド プロシージャの追加] を選択します。
コード エディターで内容を次の 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)
[データベース更新のプレビュー] ダイアログ ボックスで、[データベースの更新] をクリックします。
データベースに InsertCustomer ストアド プロシージャが追加されます。
LightSwitch アプリを作成する
このステップでは、ストアド プロシージャを呼び出し、Northwind データベースに新規顧客を追加するアプリを作成します。
アプリを作成するには
メニュー バーで [ファイル]、[新規]、[プロジェクト] の順に選択します。
[新しいプロジェクト] ダイアログ ボックスで、[Visual Basic] ノードまたは [Visual C#] ノードを展開し、[LightSwitch HTML アプリケーション] テンプレートを選択します。
[名前] ボックスに「NorthwindSP」と入力し、[OK] を選択します。
データ ソースを追加するには
ソリューション エクスプローラーで [データ ソース] ノードのショートカット メニューを開き、[データ ソースの追加] を選択します。
データ ソースの添付ウィザードで、[データベース]、[次へ] の順に選択します。
[接続プロパティ] ダイアログ ボックスで、Northwind データベースの接続詳細情報を入力し、[OK] を選択します。
[データベース オブジェクトの選択] ページで、[テーブル] ノードを展開し、[Customers] チェック ボックスをオンにして [完了] を選択します。
ローカル テーブルを追加するには
ソリューション エクスプローラーで [Data Sources] ノードのショートカット メニューを開き、[テーブルの追加] を選択します。
[プロパティ] ウィンドウで、[名前] プロパティを選択し、「NewCustomer」と入力します。
エンティティ デザイナーで、次のフィールドを追加します。
名前
種類
必須
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 カスタム ビジネス タイプを利用できます。
画面を追加するには
エンティティ デザイナーの [パースペクティブ] バーで [HTMLClient] を選択します。
ツール バーの [画面] を選択します。
[新しい画面の追加] ダイアログ ボックスで、[共通画面セット] テンプレートを選択し、[画面セット名] ボックスに「Customers」と入力し、[画面データ] ボックスの一覧で [NewCustomer] を選択し、[OK] を選択します。
ストアド プロシージャを呼び出すには
ソリューション エクスプローラーで、[NorthwindSP.Server] ノードのショートカット メニューを開き、[追加]、[参照] の順に選択します。
[参照の追加] ダイアログ ボックスで、[System.Configuration] チェック ボックスをオンにし、[OK] を選択します。
ソリューション エクスプローラーで [NewCustomer.lsml] ノードのショートカット メニューを開き、[開く] を選択します。
エンティティ デザイナーの [パースペクティブ] バーで [サーバー] を選択します。
ツール バーで、[コードの記述] ボックスの一覧を展開し、[NewCustomers_Inserting] を選択します。
コード エディターで、既存のコードを次のように書き換えます。
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 ストアド プロシージャへのパラメーターとして提供されます。
アプリをテストするには
コード エディターで、NewCustomers_Inserting メソッドにブレークポイントを設定します。
アプリを実行し、[CustomersSet] 画面の [追加] を選択します。
[Customers] 画面で、すべてのフィールドに情報を入力し、[保存] を選択します。
ブレークポイントにヒットします。つまり、コードが動作していることが示されます。F5 キーを押して続行します。 Northwind データベースの Customers テーブルを開くと、新しい顧客のレコードが表示されます。
次の手順
通常どおりに LightSwitch 画面とビジネス ロジックを作成し、ストアド プロシージャを使用して機能するアプリケーションをすばやく簡単に作成できます。
参照
処理手順
方法: LightSwitch でストアド プロシージャを実行する