SqlDataSource クラス
アセンブリ: System.Web (system.web.dll 内)
構文
Public Class SqlDataSource Inherits DataSourceControl
public class SqlDataSource : DataSourceControl
public class SqlDataSource extends DataSourceControl
public class SqlDataSource extends DataSourceControl
SqlDataSource データ ソース コントロールは、データ バインド コントロールに対する SQL リレーショナル データベース内のデータを表します。SqlDataSource コントロールをデータ バインド コントロールと組み合わせて使用すると、リレーショナル データベースからデータを取得して、コードをほとんど、またはまったく必要とせずに、Web ページでデータの表示、編集、並べ替えを行うことができます。
データベースに接続するには、ConnectionString プロパティを有効な接続文字列に設定する必要があります。SqlDataSource は、SqlClient、OleDb、Odbc、または OracleClient などの ADO.NET プロバイダを使用して接続できる任意の SQL リレーショナル データベースをサポートできます。接続文字列の保護に関する詳細については、「方法 : データ ソース コントロールを使用するときに接続文字列をセキュリティ保護する」を参照してください。
基になるデータベースからデータを取得するには、SQL クエリを使用して SelectCommand プロパティを設定します。SqlDataSource が関連付けられているデータベースがストアド プロシージャをサポートしている場合は、SelectCommand プロパティをストアド プロシージャの名前に設定できます。指定する SQL クエリは、パラメータ化されたクエリでもかまいません。パラメータ化されたクエリに関連付けられた Parameter オブジェクトを、SelectParameters コレクションに追加できます。パラメータ化された SQL クエリと構文の詳細については、「データ ソース コントロールとパラメータの使用」を参照してください。
SqlDataSource コントロールは、Select メソッドが呼び出されるたびにデータを取得します。このメソッドを使用すると、SelectMethod プロパティで指定されたメソッドにプログラムによってアクセスできます。Select メソッドは、SqlDataSource にバインドされたコントロールの DataBind メソッドが呼び出されたときに、そのコントロールによって自動的に呼び出されます。データ バインド コントロールの DataSourceID プロパティを設定すると、コントロールは必要に応じてデータ ソースのデータに自動的にバインドされます。ObjectDataSource コントロールをデータ バインド コントロールにバインドする場合は、DataSourceID プロパティを設定することをお勧めします。DataSource プロパティを使用することもできますが、その場合はデータ バインド コントロールの DataBind メソッドを明示的に呼び出す必要があります。SqlDataSource を使用できるデータ バインド コントロールの例には、DataGrid、DetailsView、DataList、および DropDownList があります。基になるデータベースからデータを取得するために、Select メソッドをプログラムによっていつでも呼び出すことができます。
宣言やプログラムにより ASP.NET を使用するシナリオでは、データ バインド コントロールの DataSourceID プロパティを SqlDataSource の ID に設定できます。SqlDataSource クラスのインスタンスをデータ バインド コントロールの DataSource プロパティに割り当てることもできます。データ バインド コントロールをデータ ソース コントロールにバインドする方法の詳細については、「ASP.NET データ アクセスの概要」を参照してください。
基になるデータベース製品の機能と SqlDataSource クラスのインスタンスの構成に応じて、更新、挿入、および削除などのデータ操作を実行できます。これらのデータ操作を実行するには、実行する操作に対して適切なコマンド テキストと関連付けられたパラメータを設定します。たとえば、更新操作の場合は、UpdateCommand プロパティを SQL 文字列またはストアド プロシージャの名前に設定して、必要なパラメータを UpdateParameters コレクションに追加します。Update メソッドがコードから明示的に呼び出されるか、データ バインド コントロールから自動的に呼び出されると、更新が実行されます。Delete 操作および Insert 操作の場合も、同じ一般的なパターンに従います。
SelectCommand、UpdateCommand、InsertCommand、および DeleteCommand の各プロパティで使用する SQL クエリおよびコマンドをパラメータ化できます。つまり、クエリまたはコマンドで、リテラル値の代わりにプレースホルダを使用して、そのプレースホルダをアプリケーションまたはユーザー定義変数にバインドできます。SQL クエリ内のパラメータは、セッション変数、Web フォーム ページのクエリ文字列に渡される値、その他のサーバー コントロールのプロパティ値などにバインドできます。SQL クエリ内のパラメータを SqlDataSource と共に使用する方法の詳細については、「データ ソース コントロールとパラメータの使用」、「SqlDataSource コントロールにおけるパラメータの使用」、および「SqlDataSource コントロールにおけるパラメータの使用」を参照してください。
既定では、SqlDataSource コントロールは .NET Framework SQL Server 用データ プロバイダで使用しますが、SqlDataSource は Microsoft SQL Server 固有ではありません。SqlDataSource コントロールは、マネージ ADO.NET プロバイダが用意されている任意のデータベース製品に関連付けることができます。System.Data.OleDb プロバイダで使用する場合、SqlDataSource は OLE DB に準拠した任意のデータベースで使用できます。System.Data.Odbc プロバイダで使用する場合、SqlDataSource は、IBM DB2、MySQL、PostgreSQL などの ODBC ドライバおよびデータベースで使用できます。System.Data.OracleClient プロバイダで使用する場合、SqlDataSource は Oracle 8.1.7 以降のデータベースで使用できます。使用できるプロバイダの一覧は、構成ファイル (Machine.config または Web.config ファイル) の DbProviderFactories セクションに登録されます。詳細については、「SqlDataSource コントロールによるデータの選択」を参照してください。
SqlDataSource を使用してページにデータを表示する場合、データ ソース コントロールのデータ キャッシュ機能を使用して、ページのパフォーマンスを向上できます。キャッシュを利用すると、Web サーバー上のメモリ使用量は多くなりますが、データベース サーバーに対する処理負荷を削減できます。ほとんどの場合、これは適切なトレードオフといえます。EnableCaching プロパティを true に設定し、CacheDuration プロパティをキャッシュ エントリが破棄されるまでの秒数、つまり、キャッシュにデータが格納される秒数に設定すると、SqlDataSource はデータを自動的にキャッシュします。また、CacheExpirationPolicy やオプションの SqlCacheDependency 値を指定することもできます。
SqlDataSource には、次の表に示す追加機能が用意されています。
DataSourceMode プロパティを DataSet 値に設定し、EnableCaching プロパティを true に設定します。また、キャッシュ データに対し、必要なキャッシュ動作に基づいて、CacheDuration プロパティと CacheExpirationPolicy プロパティを設定します。 | |
DeleteCommand プロパティを、データの削除に使用する SQL ステートメントに設定します。通常、このステートメントはパラメータ化されます。 | |
DataSourceMode プロパティを DataSet 値に設定します。FilterExpression プロパティを、Select メソッドの呼び出し時にデータをフィルタ処理するために使用するフィルタ式に設定します。 | |
InsertCommand プロパティを、データの挿入に使用する SQL ステートメントに設定します。通常、このステートメントはパラメータ化されます。 | |
GridView などの一部のデータ バインド コントロールでは、DataSourceMode プロパティを DataSet 値に設定した場合、ページングがサポートされますが、現在、SqlDataSource ではサポートされていません。 | |
UpdateCommand プロパティを、データの更新に使用する SQL ステートメントに設定します。通常、このステートメントはパラメータ化されます。 |
すべてのデータ ソース コントロールと同様に、SqlDataSource コントロールはデータ ソース ビュー クラスに関連付けられています。SqlDataSource コントロールには、SqlDataSourceView が 1 つだけ関連付けられており、常に Table という名前になります。
SqlDataSource コントロールは視覚的に表示されません。このコントロールは、宣言によって作成できるようにコントロールとして実装されます。また、オプションで状態管理に関与させることもできます。したがって、SqlDataSource は、EnableTheming プロパティや SkinID プロパティに用意されているような表示機能をサポートしていません。
-
宣言構文を使用して GridView コントロールに SQL Server のデータを表示する方法を最初のコード例に示します。
-
宣言構文を使用して ODBC に準拠したデータベースのデータを GridView コントロールに表示する方法を 2 番目のコード例に示します。
SqlDataSource コントロールを宣言によって使用して、SQL Server からデータを取得して GridView コントロールに表示する方法を次のコード例に示します。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <HTML> <BODY> <FORM runat="server"> <asp:SqlDataSource id="SqlDataSource1" runat="server" DataSourceMode="DataReader" ConnectionString="<%$ ConnectionStrings:MyNorthwind%>" SelectCommand="SELECT FirstName, LastName, Title FROM Employees"> </asp:SqlDataSource> <asp:GridView id="GridView1" runat="server" DataSourceID="SqlDataSource1"> </asp:GridView> </FORM> </BODY> </HTML>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <HTML> <BODY> <FORM runat="server"> <asp:SqlDataSource id="SqlDataSource1" runat="server" DataSourceMode="DataReader" ConnectionString="<%$ ConnectionStrings:MyNorthwind%>" SelectCommand="SELECT FirstName, LastName, Title FROM Employees"> </asp:SqlDataSource> <asp:GridView id="GridView1" runat="server" DataSourceID="SqlDataSource1"> </asp:GridView> </FORM> </BODY> </HTML>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <HTML> <BODY> <FORM runat="server"> <asp:SqlDataSource id="SqlDataSource1" runat="server" DataSourceMode="DataReader" ConnectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;" SelectCommand="SELECT FirstName, LastName, Title FROM Employees"> </asp:SqlDataSource> <asp:GridView id="GridView1" runat="server" DataSourceID="SqlDataSource1"> </asp:GridView> </FORM> </BODY> </HTML>
SqlDataSource コントロールを宣言によって使用して、ODBC に準拠したデータベースからデータを取得して GridView コントロールに表示する方法を次のコード例に示します。ProviderName プロパティは、.NET Framework ODBC 用データ プロバイダの名前 (System.Data.Odbc) です。
<%@Page Language="VB" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <HTML> <BODY> <!-- This example uses a Northwind database that is hosted by an ODBC-compliant database. To run this sample, create an ODBC DSN to any database that hosts the Northwind database, including Microsoft SQL Server or Microsoft Access, change the name of the DSN in the ConnectionString, and view the page. --> <FORM runat="server"> <asp:SqlDataSource id="SqlDataSource1" runat="server" ProviderName="System.Data.Odbc" DataSourceMode="DataReader" ConnectionString="dsn=myodbc3dsn;" SelectCommand="SELECT FirstName, LastName, Title FROM Employees"> </asp:SqlDataSource> <asp:GridView id="GridView1" runat="server" DataSourceID="SqlDataSource1"> </asp:GridView> </FORM> </BODY> </HTML>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <HTML> <BODY> <!-- This example uses a Northwind database that is hosted by an ODBC-compliant database. To run this sample, create an ODBC DSN to any database that hosts the Northwind database, including Microsoft SQL Server or Microsoft Access , change the name of the DSN in the ConnectionString, and view the page. --> <FORM runat="server"> <asp:SqlDataSource id="SqlDataSource1" runat="server" ProviderName="System.Data.Odbc" DataSourceMode="DataReader" ConnectionString="dsn=myodbc3dsn;" SelectCommand="SELECT FirstName, LastName, Title FROM Employees"> </asp:SqlDataSource> <asp:GridView id="GridView1" runat="server" DataSourceID="SqlDataSource1"> </asp:GridView> </FORM> </BODY> </HTML>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <HTML> <BODY> <!-- This example uses a Northwind database that is hosted by an ODBC-compliant database. To run this sample, create an ODBC DSN to any database that hosts the Northwind database, including Microsoft SQL Server or Microsoft Access , change the name of the DSN in the ConnectionString, and view the page. --> <FORM runat="server"> <asp:SqlDataSource id="SqlDataSource1" runat="server" ProviderName="System.Data.Odbc" DataSourceMode="DataReader" ConnectionString="dsn=myodbc3dsn;" SelectCommand="SELECT FirstName, LastName, Title FROM Employees"> </asp:SqlDataSource> <asp:GridView id="GridView1" runat="server" DataSourceID="SqlDataSource1"> </asp:GridView> </FORM> </BODY> </HTML>
GridView コントロールを使用した表示および更新の一般的なシナリオを次のコード例に示します。前の例と同じように、Northwind データベースのデータは GridView コントロールに表示されます。また、UpdateCommand プロパティが指定され、AutoGenerateEditButton プロパティが true に設定されているため、コードを追加せずにレコードの編集と更新を行うことができます。GridView コントロールは、UpdateParameters コレクションへのパラメータの追加を自動的に処理し、GridView コントロールの [更新] ボタンがクリックされたときに Update メソッドを呼び出します。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <HTML> <BODY> <FORM runat="server"> <asp:SqlDataSource id="SqlDataSource1" runat="server" DataSourceMode="DataSet" ConnectionString="<%$ ConnectionStrings:MyNorthwind%>" SelectCommand="SELECT EmployeeID,FirstName,LastName,Title FROM Employees" UpdateCommand="Update Employees SET FirstName=@FirstName,LastName=@LastName,Title=@Title WHERE EmployeeID=@EmployeeID"> </asp:SqlDataSource> <asp:GridView id="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="EmployeeID" AutoGenerateEditButton="True" DataSourceID="SqlDataSource1"> <columns> <asp:BoundField HeaderText="First Name" DataField="FirstName" /> <asp:BoundField HeaderText="Last Name" DataField="LastName" /> <asp:BoundField HeaderText="Title" DataField="Title" /> </columns> </asp:GridView> </FORM> </BODY> </HTML>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <HTML> <BODY> <FORM runat="server"> <asp:SqlDataSource id="SqlDataSource1" runat="server" DataSourceMode="DataSet" ConnectionString="<%$ ConnectionStrings:MyNorthwind%>" SelectCommand="SELECT EmployeeID,FirstName,LastName,Title FROM Employees" UpdateCommand="Update Employees SET FirstName=@FirstName,LastName=@LastName,Title=@Title WHERE EmployeeID=@EmployeeID"> </asp:SqlDataSource> <asp:GridView id="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="EmployeeID" AutoGenerateEditButton="True" DataSourceID="SqlDataSource1"> <columns> <asp:BoundField HeaderText="First Name" DataField="FirstName" /> <asp:BoundField HeaderText="Last Name" DataField="LastName" /> <asp:BoundField HeaderText="Title" DataField="Title" /> </columns> </asp:GridView> </FORM> </BODY> </HTML>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <HTML> <BODY> <FORM runat="server"> <asp:SqlDataSource id="SqlDataSource1" runat="server" DataSourceMode="DataSet" ConnectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;" SelectCommand="SELECT EmployeeID,FirstName,LastName,Title FROM Employees" UpdateCommand="Update Employees SET FirstName=@FirstName,LastName=@LastName,Title=@Title WHERE EmployeeID=@EmployeeID"> </asp:SqlDataSource> <asp:GridView id="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="EmployeeID" AutoGenerateEditButton="True" DataSourceID="SqlDataSource1"> <Columns> <asp:BoundField HeaderText="First Name" DataField="FirstName" /> <asp:BoundField HeaderText="Last Name" DataField="LastName" /> <asp:BoundField HeaderText="Title" DataField="Title" /> </Columns> </asp:GridView> </FORM> </BODY> </HTML>
DropDownList コントロールおよび TextBox コントロールを使用した表示および更新の一般的なシナリオを次のコード例に示します。DropDownList コントロールでは、UpdateParameters コレクションへの更新パラメータの自動的な追加、および Update メソッドの呼び出しは行われないため、ユーザーが実行する必要があります。更新パラメータは宣言によって指定され、イベントが発生したときに Update 操作を実行するイベント ハンドラを追加できます。
<%@Page Language="VB" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <SCRIPT runat="server"> Sub On_Click(ByVal source As Object, ByVal e As EventArgs) Try SqlDataSource1.Update() Catch except As Exception ' Handle the Exception. End Try Label2.Text="The record was updated successfully!" End Sub 'On_Click </SCRIPT> <HTML> <BODY> <FORM runat="server"> <asp:SqlDataSource id="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:MyNorthwind%>" SelectCommand="SELECT EmployeeID, LastName, Address FROM Employees" UpdateCommand="UPDATE Employees SET Address=@Address WHERE EmployeeID=@EmployeeID"> <UpdateParameters> <asp:ControlParameter Name="Address" ControlId="TextBox1" PropertyName="Text"/> <asp:ControlParameter Name="EmployeeID" ControlId="DropDownList1" PropertyName="SelectedValue"/> </UpdateParameters> </asp:SqlDataSource> <asp:DropDownList id="DropDownList1" runat="server" DataTextField="LastName" DataValueField="EmployeeID" DataSourceID="SqlDataSource1"> </asp:DropDownList> <P> <asp:Label id="Label1" runat="server" Text="Enter a new address for the selected user." /> <asp:TextBox id="TextBox1" runat="server" /> <asp:Button id="Submit" runat="server" Text="Submit" OnClick="On_Click" /> <P><asp:Label id="Label2" runat="server" Text="" /> </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"> <SCRIPT runat="server"> private void On_Click(Object source, EventArgs e) { try { SqlDataSource1.Update(); } catch (Exception except) { // Handle the Exception. } Label2.Text="The record was updated successfully!"; } </SCRIPT> <HTML> <BODY> <FORM runat="server"> <asp:SqlDataSource id="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:MyNorthwind%>" SelectCommand="SELECT EmployeeID, LastName, Address FROM Employees" UpdateCommand="UPDATE Employees SET Address=@Address WHERE EmployeeID=@EmployeeID"> <UpdateParameters> <asp:ControlParameter Name="Address" ControlId="TextBox1" PropertyName="Text"/> <asp:ControlParameter Name="EmployeeID" ControlId="DropDownList1" PropertyName="SelectedValue"/> </UpdateParameters> </asp:SqlDataSource> <asp:DropDownList id="DropDownList1" runat="server" DataTextField="LastName" DataValueField="EmployeeID" DataSourceID="SqlDataSource1"> </asp:DropDownList> <P> <asp:Label id="Label1" runat="server" Text="Enter a new address for the selected user." /> <asp:TextBox id="TextBox1" runat="server" /> <asp:Button id="Submit" runat="server" Text="Submit" OnClick="On_Click" /> <P><asp:Label id="Label2" runat="server" Text="" /> </FORM> </BODY> </HTML>
<%@Page Language="VJ#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <SCRIPT runat="server"> private void On_Click(Object source, System.EventArgs e) { try { SqlDataSource1.Update(); } catch (Exception except) { // Handle the Exception. } Label2.set_Text("The record was updated successfully!"); } //On_Click </SCRIPT> <HTML> <BODY> <FORM runat="server"> <asp:SqlDataSource id="SqlDataSource1" runat="server" ConnectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;" SelectCommand="SELECT EmployeeID, LastName, Address FROM Employees" UpdateCommand="UPDATE Employees SET Address=@Address WHERE EmployeeID=@EmployeeID"> <UpdateParameters> <asp:ControlParameter Name="Address" ControlId="TextBox1" PropertyName="Text"/> <asp:ControlParameter Name="EmployeeID" ControlId="DropDownList1" PropertyName="SelectedValue"/> </UpdateParameters> </asp:SqlDataSource> <asp:DropDownList id="DropDownList1" runat="server" DataTextField="LastName" DataValueField="EmployeeID" DataSourceID="SqlDataSource1"> </asp:DropDownList> <P> <asp:Label id="Label1" runat="server" Text="Enter a new address for the selected user." /> <asp:TextBox id="TextBox1" runat="server" /> <asp:Button id="Submit" runat="server" Text="Submit" OnClick="On_Click" /> <P><asp:Label id="Label2" runat="server" Text="" /> </FORM> </BODY> </HTML>
System.Web.UI.Control
System.Web.UI.DataSourceControl
System.Web.UI.WebControls.SqlDataSource
System.Web.UI.WebControls.AccessDataSource
プラットフォーム
Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。
参照
- SqlDataSource クラスのページへのリンク