現在オフラインです。再接続するためにインターネットの接続を待っています

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

この記事は、以前は次の ID で公開されていました: JP306574
Microsoft Visual C# .NET については、次の資料を参照してください。 320916.
Microsoft Visual J# .NET については、次の資料を参照してください。 320622.
Microsoft Visual Basic 6.0 については、次の資料を参照してください。 164485.
Microsoft Visual Basic 6.0 については、次の資料を参照してください。 300488.

この資料の内容

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

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

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

必要条件

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

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] をクリックします。
back to the top

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 変数を使用して処理された行数を取得する出力パラメーターです。

back to the top

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

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

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

    Web フォームの Page_Load イベントに次のコードを追加します。
    'ページがロードされた最初のタイミングでのみこのコードを実行します。' IF ステートメント内部のコードは、ページを再送信したときにはスキップされます。If Not IsPostBack ThenDim MyConnection As SqlConnectionDim MyCommand As SqlCommandDim 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()ElseMyDataReader.Close()End If.Dispose()  'Command オブジェクトを破棄します。MyConnection.Close() ' 接続を閉じます。End WithEnd 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.ClickDim DS As DataSetDim MyConnection As SqlConnectionDim 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.OutputDS = 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 が返されます。
back to the top

トラブルシューティング

  • データベースに接続できない場合は、ConnectionString プロパティに SQL Server が実行されているサーバーが指定されているかどうかを確認します。
  • データベースに接続できても、ストアド プロシージャを作成しようとすると問題が発生する場合は、接続しているデータベースでストアド プロシージャを作成できる正しい権限があるかどうかを確認します。
back to the top
関連情報
詳細については、Microsoft .NET Framework SDK (Software Development Kit) ドキュメントの次のトピックを参照してください。ADO.NET や Visual Basic .NET に関する一般的な情報については、次の MSDN ニュースグループを参照してください。詳細については、以下の書籍を参照してください。
R. Allen Wyke、Sultan Rehman、Brad Leupen 著『プログラミング XML』 (日経 BP ソフトプレス、2002 年)
詳細については、次のマイクロソフト Web サイトを参照してください。Microsoft Active Server Pages を使用してこの作業を実行する方法の詳細については、以下のサポート技術情報番号をクリックしてください。
300488 [HOWTO] SQL Server ストアド プロシージャを ASP ページから実行する方法
back to the top
プロパティ

文書番号:306574 - 最終更新日: 10/24/2012 13:22:00 - リビジョン: 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
フィードバック