SqlDataSource Web サーバー コントロールの概要

更新 : 2007 年 11 月

SqlDataSource コントロールでは、Web サーバー コントロールを使用して、リレーショナル データベースにあるデータにアクセスできます。これには、Microsoft SQL Server データベースや Oracle データベースに加え、OLE DB データ ソースや ODBC データ ソースも含まれます。SqlDataSource コントロールは、GridViewFormViewDetailsView の各コントロールなどのデータ バインド コントロールと共に使用し、コードをほとんど、またはまったく使用せずに ASP.NET Web ページのデータを表示して操作できます。

このトピックの内容は次のとおりです。

  • 背景

  • コード例

  • クラス リファレンス

背景

SqlDataSource コントロールは、ADO.NET クラスを使用して、ADO.NET でサポートされるすべてのデータベースと対話します。これらのデータベースには、Microsoft SQL Server (System.Data.SqlClient プロバイダを使用)、System.Data.OleDbSystem.Data.Odbc、および Oracle (System.Data.OracleClient プロバイダを使用) があります。SqlDataSource コントロールを使用すると、ADO.NET のクラスを直接使用せずに ASP.NET ページのデータにアクセスして操作できます。データベースに接続するための接続文字列を指定し、データの操作に使用する SQL ステートメントまたはストアド プロシージャを定義します。SqlDataSource コントロールは実行時にデータベース接続を自動的に開き、SQL ステートメントまたはストアド プロシージャを実行し、選択されたデータがある場合はそれを返してから接続を閉じます。

データ ソースへの SqlDataSource コントロールの接続

SqlDataSource コントロールを構成する場合、ProviderName プロパティをデータベースの種類に設定し (既定値は System.Data.SqlClient)、ConnectionString プロパティをデータベースに接続するために必要な情報を含む接続文字列に設定します。接続文字列の内容は、データ ソース コントロールがアクセスするデータベースの種類によって異なります。たとえば、SqlDataSource コントロールには、サーバー名、データベース名 (カタログ名)、および SQL Server に接続する際にユーザーを認証する方法に関する情報が必要です。有効な接続文字列については、SqlConnectionOracleConnectionOleDbConnection、および OdbcConnection の各クラスの ConnectionString プロパティのトピックを参照してください。

接続文字列は、SqlDataSource コントロールのプロパティの設定としてデザイン時に設定する代わりに、connectionStrings 構成要素を使用して、アプリケーションの構成設定の一部として中央の場所に格納することもできます。この方法では、ASP.NET のコードから独立して接続文字列を管理でき、プロテクト構成を使用して暗号化することもできます。MyNorthwind という connectionStrings 構成要素に格納されている接続文字列を使用して SQL Server の Northwind サンプル データベースに接続するコード例を次に示します。

<%@ Page language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
  <head runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" runat="server">
      <asp:SqlDataSource
          id="SqlDataSource1"
          runat="server"
          DataSourceMode="DataReader"
          ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
          SelectCommand="SELECT LastName FROM Employees">
      </asp:SqlDataSource>

      <asp:ListBox
          id="ListBox1"
          runat="server"
          DataTextField="LastName"
          DataSourceID="SqlDataSource1">
      </asp:ListBox>

    </form>
  </body>
</html>
<%@ Page language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
  <head runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" runat="server">
      <asp:SqlDataSource
          id="SqlDataSource1"
          runat="server"
          DataSourceMode="DataReader"
          ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
          SelectCommand="SELECT LastName FROM Employees">
      </asp:SqlDataSource>

      <asp:ListBox
          id="ListBox1"
          runat="server"
          DataTextField="LastName"
          DataSourceID="SqlDataSource1">
      </asp:ListBox>

    </form>
  </body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
  <head runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
    <form id="form1" runat="server">
      <asp:SqlDataSource
          id="SqlDataSource1"
          runat="server"
          DataSourceMode="DataReader"
          ConnectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;"
          SelectCommand="SELECT LastName FROM Employees">
      </asp:SqlDataSource>

      <asp:ListBox
          id="ListBox1"
          runat="server"
          DataTextField="LastName"
          DataSourceID="SqlDataSource1">
      </asp:ListBox>

    </form>
  </body>
</html>

SqlDataSource コントロールによるデータ コマンドの発行

SqlDataSource コマンドには、SelectCommandUpdateCommandDeleteCommand、および InsertCommand の中から 4 つまでのコマンド (SQL クエリ) を指定できます。各コマンドは、データ ソース コントロールの個別のプロパティです。各コマンド プロパティに対して、データ ソース コントロールが実行する SQL ステートメントを指定します。ストアド プロシージャをサポートするデータベースに接続する場合、データ ソース コントロールには SQL ステートメントの代わりにストアド プロシージャの名前を指定できます。

実行時に値を提供するためのプレースホルダを含むパラメータ化されたコマンドを作成できます。パラメータ化された SQL Select コマンドの一般的な例を次に示します。

Select CustomerID, CompanyName From Customers Where City = @city

実行時にコマンドがパラメータ値を取得する場所 (別のコントロール、クエリ文字列など) を指定するパラメータ オブジェクトを作成できます。プログラムによってパラメータ値を指定することもできます。詳細については、「SqlDataSource コントロールにおけるパラメータの使用」を参照してください。

データ ソース コントロールは、対応する SelectUpdateDelete、または Insert の各メソッドが呼び出されたときにコマンドを実行します。ページの、またはデータ ソース コントロールに連結されたコントロールの DataBind メソッドを呼び出すと、Select メソッドが自動的に呼び出されます。4 つのメソッドのいずれかを明示的に呼び出して、必要なときにデータ ソース コントロールにコマンドを実行させることもできます。GridView コントロールなどの一部のコントロールでは、このようなメソッドを自動的に呼び出すことができます。その場合、そのメソッドを呼び出したり、DataBind メソッドを明示的に呼び出す必要はありません。詳細については、「SqlDataSource コントロールによるデータの選択」および「SqlDataSource コントロールによるデータの変更」を参照してください。

DataSet オブジェクトまたは DataReader オブジェクトを返す

SqlDataSource コントロールは、DataSet オブジェクトまたは ADO.NET データ リーダーの 2 つの形式でデータを返すことができます。データ ソース コントロールの DataSourceMode プロパティを設定して、返す形式を指定できます。DataSet オブジェクトにはサーバーのメモリのすべてのデータが含まれるので、取得した後にさまざまな方法でデータを操作できます。データ リーダーには、個々のレコードをフェッチするための読み取り専用のカーソルがあります。一般に、データの取得後にデータのフィルタ、並べ替え、またはページングを行う場合、またはキャッシュを維持する場合は、データセットを返します。一方、ページのコントロールを使用して返されたデータを表示するだけの場合は、データ リーダーを使用します。データ リーダーは、返されたデータを ListBoxDropDownList、または GridView の各コントロールに読み取り専用のリストとして表示する場合などに最適です。

SqlDataSource コントロールによるキャッシュ

SqlDataSource コントロールは取得したデータをキャッシュできるので、負荷の大きいクエリの実行を回避して、アプリケーションのパフォーマンスを向上できます。データの揮発性が比較的低く、キャッシュされた結果がシステム メモリを大量に占有しない場合、キャッシュはほとんどすべての状況で有効です。

既定では、キャッシュは無効になっています。キャッシュを有効にするには、EnableCaching を true に設定します。キャッシュ機構は時間に基づきます。CacheDuration プロパティにデータをキャッシュする秒数を設定できます。データ ソース コントロールは、接続、select コマンド、select のパラメータ、およびキャッシュの設定の組み合わせに対して個別のキャッシュ エントリを維持します。

SqlDataSource コントロールは、SQL Server のキャッシュ依存関係の機能を使用できます (使用している SQL Server のバージョンで利用可能な場合)。この機能によって、SQL Server が指定されたテーブルの変更を報告するまでキャッシュ内のデータを維持するように指定できます。このようなキャッシュでは、データの取得を更新されたデータを取得する必要がある場合のみに抑えることができるので、Web アプリケーションのデータ アクセスのパフォーマンスを向上できます。

詳細については、「SqlDataSource コントロールによるデータのキャッシュ」を参照してください。

SqlDataSource コントロールによるフィルタ処理

SqlDataSource コントロールのキャッシュを有効にし、データセットの形式を Select クエリが返すデータの形式に指定している場合、クエリを再実行せずにデータをフィルタ処理することもできます。SqlDataSource コントロールは FilterExpression プロパティをサポートするので、データ ソース コントロールが維持するデータに選択基準を指定できます。実行時にフィルタ式に値を提供する特別な FilterParameters オブジェクトを作成することにより、フィルタ式をパラメータ化することもできます。

SqlDataSource コントロールによる並べ替え

DataSourceModeDataSet に設定されている場合、SqlDataSource コントロールは連結コントロールからの並べ替え要求をサポートします。詳細については、「データ ソース コントロールによるデータの並べ替え」を参照してください。

ページのトップへ

コード例

SqlDataSource コントロールによるデータの選択

SqlDataSource コントロールにおけるパラメータの使用

SqlDataSource コントロールによるデータの変更

SqlDataSource コントロールによるデータのキャッシュ

方法 : SqlDataSource コントロールのフィルタ処理を有効にする

方法 : SqlDataSource コントロールを使用して SQL Server データベースに接続する (Visual Studio)

方法 : SqlDataSource コントロールを使用して Access データベースに接続する (Visual Studio)

方法 : SqlDataSource コントロールを使用して ODBC データベースに接続する (Visual Studio)

方法 : SqlDataSource コントロールを使用して Oracle データベースに接続する (Visual Studio)

ページのトップへ

クラス リファレンス

SqlDataSource コントロールに関連する主要なクラスの一覧を次の表に示します。

メンバ

説明

SqlDataSource

コントロールのメイン クラスです。

ページのトップへ

参照

概念

LinqDataSource Web サーバー コントロールの概要

参照

ObjectDataSource Web サーバー コントロールの概要

その他の技術情報

データ ソース Web サーバー コントロール