Visual Basic .NET を使用して ASP.NET で SQL Server のストアド プロシージャを呼び出す方法

文書翻訳 文書翻訳
文書番号: 306574 - 対象製品
この記事は、以前は次の ID で公開されていました: JP306574
すべて展開する | すべて折りたたむ

目次

概要

この資料では、Visual Basic .NET で ASP.NET と ADO.NET を使用して、1 つの入力パラメーターと 1 つの出力パラメータを持つ Microsoft SQL Server ストアド プロシージャを作成する方法および呼び出す方法について説明します。

この資料のコード サンプルでは、ここで作成するストアド プロシージャがデータベースに存在するかどうかのチェックが最初に行われます。ストアド プロシージャが存在しない場合、このコードはパラメーターを 1 つ取り、last name で Authors テーブルを検索して、条件に一致する行とその数を出力パラメーターに返すストアド プロシージャを作成します。

また、この資料では、簡単なユーザー インターフェイスを持つ Web フォームの作成方法も示します。この Web フォームには、以下の項目が含まれます。
  • ユーザーが検索条件を入力するテキスト ボックス。
  • 検索結果を表示する DataGrid コントロール。
  • 返されたレコードの数を表示する Label コントロール。
  • クリックしたときにストアド プロシージャを呼び出す Button コントロール。

必要条件

必要なハードウェア、ソフトウェア、ネットワーク インフラストラクチャ、および Service Pack は次のとおりです。
  • Microsoft SQL Server 7.0 またはそれ以降
  • Microsoft Visual Studio .NET
  • Microsoft Visual Basic .NET
  • データベース内にストアド プロシージャを作成するための権限
この資料は、次のトピックについて詳しい知識のあるユーザーを対象としています。
  • SQL Server のストアド プロシージャ

ASP.NET プロジェクトの作成とコントロールの追加

ここでは、ASP.NET プロジェクトを作成し、基本的なユーザー インターフェイスを構築します。以下の手順では、Microsoft Visual Basic .NET のコードを使用します。プロジェクトを作成するには、次の手順を実行します。
  1. [スタート] ボタンをクリックし、[プログラム]、[Microsoft Visual Studio .NET] を順にポイントし、[Microsoft Visual Studio .NET] をクリックします (または、[Microsoft Visual Studio .NET 2003] をポイントし、[Microsoft Visual Studio .NET 2003] をクリックします)。
  2. Visual Studio .NET のスタート ページで、[新しいプロジェクト] をクリックします。
  3. [新しいプロジェクト] ダイアログ ボックスで、[プロジェクトの種類] の [Visual Basic プロジェクト] をクリックし、[テンプレート] の [ASP.NET Web アプリケーション] をクリックします。
  4. [プロジェクト名] ボックスに Web アプリケーションの名前を入力して、[OK] をクリックします。
  5. 以下のサーバー コントロールを Web フォームに追加し、下記の表に記載されている内容に従ってプロパティを設定します。
    元に戻す全体を表示する
    コントロールID プロパティText プロパティ
    LabellblLastNameAuthor の last name を入力してください。
    TextBoxtxtLastName%
    ButtonbtnGetAuthorsAuthor を取得
    LabellblRowCount(行数)

  6. DataGrid サーバー コントロールを Web フォーム上に配置し、ID プロパティを Grdauthors に設定します。
  7. グリッドを右クリックし、[自動フォーマット] をクリックします。
  8. スキーマの [プロフェッショナル 1] をクリックし、[OK] をクリックします。

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

次の Transact-SQL コードを使用して、GetAuthorsByLastName ストアド プロシージャを作成します。
Create Procedure GetAuthorsByLastName1 (@au_lname varchar(40), @RowCount int output)  
as 

select * from authors where au_lname like @au_lname; 

/* @@ROWCOUNT は最後のステートメントで処理される行の数を返します。 */ 
select @RowCount=@@ROWCOUNT
				
上記のコードには 2 つのパラメーター、@au_lname および @RowCount が含まれています。@au_lname パラメーターは、Authors テーブルで "like" 検索を実行するための検索文字列を取得する入力パラメーターです。@RowCount パラメーターは、@@ROWCOUNT 変数を使用して処理された行数を取得する出力パラメーターです。

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

SQL Server データベースにアクセスするには、System.Data.SqlClient 名前空間をインポートする必要があります。これにより、SqlDataReader、SqlDataAdapter などの新しいオブジェクトが提供されます。SqlDataReader を使用すると、SQL Server データベースから前方スクロール タイプのストリームを読み取ることができます。DataAdapter は、データ コマンドおよびデータベース接続の集合を表します。これを使用して DataSet オブジェクトにデータを取り込み、SQL Server データベースを更新することができます。

ADO.NET では DataSet オブジェクトも利用できます。これは、一貫性のあるリレーショナル プログラミング モデルをデータ ソースに関係なく提供するメモリ常駐のデータ表現形態です。ここで説明しているコードでは、これらのオブジェクトをすべて利用します。
  1. Web フォームをダブルクリックします。
  2. 次のコードを Web フォームの宣言セクションに追加します。これはコード ウィンドウの先頭にあります。
    Imports System.Data
    Imports System.Data.SqlClient
    					
  3. ストアド プロシージャが存在するかどうかを確認して新しいストアド プロシージャを作成するために、SqlCommand オブジェクトで SqlDataReader オブジェクトを使用します。SqlCommand を使用すると、データベースに対して任意の SQL コマンドが実行できます。次に SqlCommand の ExecuteReader メソッドを呼び出すと、SqlDataReader が返されます。この中にクエリに一致する行が含まれています。

    Web フォームの Page_Load イベントに次のコードを追加します。
    'ページがロードされた最初のタイミングでのみこのコードを実行します。
    ' IF ステートメント内部のコードは、ページを再送信したときにはスキップされます。
    If Not IsPostBack Then
    Dim MyConnection As SqlConnection
    Dim MyCommand As SqlCommand
    Dim MyDataReader As SqlDataReader
    
    ' Connection オブジェクトを作成します。
    MyConnection = New SqlConnection("server=(local);database=pubs;Trusted_Connection=yes")
    
    ' Command オブジェクトを作成し、接続を設定します。
    ' 次の SQL ステートメントにより、GetAuthorsByLastName ストアド プロシージャが 
    ' 既に存在しているかどうかのチェックが行われます。
    MyCommand = New SqlCommand("if object_id('pubs..GetAuthorsByLastName') is not null " + "begin" + " if objectproperty(object_id('pubs..GetAuthorsByLastName'), 'IsProcedure')= 1" + " select object_id('pubs..GetAuthorsByLastName')" + " else" + " return " + "end" + " else" + " return", MyConnection)
    
    With MyCommand
    ' 実行するコマンドの種類を設定します。
    .CommandType = CommandType.Text
    
    ' 接続を開きます。
    .Connection.Open()
    
    ' SQL ステートメントを実行し、返された行を DataReader に取り込みます。
    MyDataReader = .ExecuteReader()
    
    ' 行が返された場合は、作成しようとしているストアド プロシージャは 
    ' 既に存在しています。したがって、ストアド プロシージャの作成は、
    ' それが存在していない場合にのみ行います。
    If Not MyDataReader.Read() Then
    .CommandText = "create procedure GetAuthorsByLastName (@au_lname varchar(40), " & _ 
    
    "@RowCount int output) " & _ 
    
    " as select * from authors where au_lname like @au_lname; select @RowCount=@@ROWCOUNT"
    MyDataReader.Close()
    .ExecuteNonQuery()
    Else
    MyDataReader.Close()
    End If
    
    .Dispose()  'Command オブジェクトを破棄します。
    MyConnection.Close() ' 接続を閉じます。
    End With
    End If
    					
  4. このストアド プロシージャを btnGetAuthors ボタンの Click イベントで呼び出し、SqlDataAdapter オブジェクトを使用してストアド プロシージャを実行します。ストアド プロシージャを実行するには、パラメーターを作成して、SqlDataAdapter オブジェクトの Parameters コレクションに追加する必要があります。

    Page_Load イベントの後に次のコードを追加します。
    Private Sub btnGetAuthors_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles btnGetAuthors.Click
    Dim DS As DataSet
    Dim MyConnection As SqlConnection
    Dim MyDataAdapter As SqlDataAdapter
    
    ' SQL Server への接続を作成します。
    MyConnection = New SqlConnection("server=(local);database=pubs;Trusted_Connection=yes")
    
    ' DataAdapter を作成し、ストアド プロシージャの名前を提供します。
    MyDataAdapter = New SqlDataAdapter("GetAuthorsByLastName", MyConnection)
    
    ' コマンドの種類を StoredProcedure に設定します。
    MyDataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure
    
    ' パラメーターを作成し、ストアド プロシージャの Parameters コレクションに追加します。
    MyDataAdapter.SelectCommand.Parameters.Add(New SqlParameter("@au_lname", _
    SqlDbType.VarChar, 40))
    
    ' 検索する値をパラメーターに代入します。
    MyDataAdapter.SelectCommand.Parameters("@au_lname").Value = Trim(txtLastName.Text)
    
    ' 出力パラメーターを作成して、Parameters コレクションに追加します。 
    MyDataAdapter.SelectCommand.Parameters.Add(New SqlParameter("@RowCount", _
    SqlDbType.Int, 4))
    
    ' パラメーターの方向を設定します。このパラメーターは返される行数を返します。
    MyDataAdapter.SelectCommand.Parameters("@RowCount").Direction = ParameterDirection.Output
    
    DS = New DataSet() ' レコードを保持するための新しい DataSet を作成します。
    MyDataAdapter.Fill(DS, "AuthorsByLastName") 'DataSet に返される行を設定します。
    
    ' 返される行数を取得して、Label コントロールに代入します。
    'lblRowCount.Text = DS.Tables(0).Rows.Count().ToString() & " Rows Found!"
    lblRowCount.Text = MyDataAdapter.SelectCommand.Parameters(1).Value & " Rows Found!"
    
    ' 行を保持している DataSet を DataGrid のデータ ソースに設定します。
    Grdauthors.DataSource = DS.Tables("AuthorsByLastName").DefaultView
    
    ' DataSet を DataGrid にバインドします。 
    ' 注: このメソッドを呼び出さないと、DataGrid は表示されません。
    Grdauthors.DataBind()
    
    MyDataAdapter.Dispose() ' DataAdapter の破棄
    MyConnection.Close() ' 接続を閉じます。
    End Sub
    					
  5. ソリューション エクスプローラーで、.aspx ページを右クリックし、[スタート ページに設定] をクリックします。
  6. プロジェクトを保存し、Visual Studio .NET の [開始] をクリックします。プロジェクトがコンパイルされ、既定のページが実行されます。
  7. テキスト ボックスに author の last name を入力し、[Author を取得] をクリックします。ストアド プロシージャが呼び出され、返された行が DataGrid に設定されます。

    G% など SQL Server タイプの文字列を指定することができます。これにより、last name が "G" で始まるすべての author が返されます。

トラブルシューティング

  • データベースに接続できない場合は、ConnectionString プロパティに SQL Server が実行されているサーバーが指定されているかどうかを確認します。
  • データベースに接続できても、ストアド プロシージャを作成しようとすると問題が発生する場合は、接続しているデータベースでストアド プロシージャを作成できる正しい権限があるかどうかを確認します。

関連情報

詳細については、Microsoft .NET Framework SDK (Software Development Kit) ドキュメントの次のトピックを参照してください。
ADO.NET の概要
http://msdn.microsoft.com/ja-jp/library/h43ks021.aspx

ADO.NET DataSet
http://msdn.microsoft.com/ja-jp/library/zb0sdh0b(VS.71).aspx

.NET Framework データ プロバイダーによるデータのアクセス
http://msdn.microsoft.com/ja-jp/library/s7ee2dwt(vs.71).aspx
ADO.NET や Visual Basic .NET に関する一般的な情報については、次の MSDN ニュースグループを参照してください。
ADO.NET 内のディスカッション

http://social.msdn.microsoft.com/Forums/ja-JP/categories/
詳細については、以下の書籍を参照してください。
R. Allen Wyke、Sultan Rehman、Brad Leupen 著『プログラミング XML』 (日経 BP ソフトプレス、2002 年)
詳細については、次のマイクロソフト Web サイトを参照してください。Microsoft Active Server Pages を使用してこの作業を実行する方法の詳細については、以下のサポート技術情報番号をクリックしてください。
300488 [HOWTO] SQL Server ストアド プロシージャを ASP ページから実行する方法

プロパティ

文書番号: 306574 - 最終更新日: 2012年10月24日 - リビジョン: 6.0
この資料は以下の製品について記述したものです。
  • Microsoft ASP.NET 1.0
  • Microsoft ASP.NET 1.1
  • Microsoft ADO.NET 1.1
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
キーワード:?
kbhowtomaster kbsqlclient kbsystemdata KB306574
Microsoft Knowledge Base の免責: Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com