QueryStringParameter クラス
アセンブリ: System.Web (system.web.dll 内)
構文
解説QueryStringParameter クラスを使用すると、HTTP 要求のクエリ文字列に渡されたフィールド値を、パラメータ クエリまたはコマンドで使用するためのパラメータにバインドできます。このフィールドは、QueryString コレクションから取得されます。QueryStringParameter が指定されていても、対応するクエリ文字列の名前/値ペアが渡されないと、データをパラメータにバインドするコントロールから例外がスローされます。同様に、クエリ文字列フィールドの名前だけを渡して、対応する値を渡さなかった場合、データは表示されません。このような状況を防ぐには、必要に応じて DefaultValue を設定します。
QueryStringParameter クラスには、Parameter クラスから継承されたプロパティに加え、バインド先のクエリ文字列値の名前を識別する QueryStringField プロパティが用意されています。
重要 : |
|---|
| QueryStringParameter は、クエリ文字列によって渡された値は一切検証せず、そのままの値を使用します。多くの場合、データ ソース コントロールで発生した Selecting、Updating、Inserting、Deleting などのイベントを処理することによって、QueryStringParameter の値をデータ ソース コントロールで使用される前に検証できます。パラメータの値が検証に合格しなかった場合は、関連付けられた CancelEventArgs クラスの Cancel プロパティを true に設定することによって、データ操作をキャンセルできます。 |
使用例QueryStringParameter パラメータを宣言してフィルタとして使用し、GridView コントロールにデータを表示する方法を次のコード例に示します。QueryStringParameter を AccessDataSource コントロールの FilterParameters コレクションに宣言および追加すると、クエリ文字列フィールド "country" の値が対応する FilterExpression 文字列にバインドされます。パラメータに対して DefaultValue が指定されていないため、"country" という名前のフィールドがクエリ文字列に渡されなかった場合、AccessDataSource から NullReferenceException がスローされます。"country" という名前のフィールドが渡された場合でも、対応する値が指定されなかった場合、GridView にデータは表示されません。
<%@ 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> <form id="Form1" method="post" runat="server"> <!-- Use a Query String with country=USA --> <asp:gridview id ="GridView1" runat="server" datasourceid="MyAccessDataSource" /> <!-- Security Note: The AccessDataSource uses a QueryStringParameter, Security Note: which does not perform validation of input from the client. --> <asp:accessdatasource id="MyAccessDataSource" runat="server" datafile="Northwind.mdb" selectcommand="SELECT EmployeeID, LastName, Address, PostalCode, Country FROM Employees" filterexpression="Country = '{0}'"> <filterparameters> <asp:querystringparameter name="country" type="String" querystringfield="country" /> </filterparameters> </asp:accessdatasource> </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> <body> <form id="Form1" method="post" runat="server"> <!-- Use a Query String with country=USA --> <asp:gridview id ="GridView1" runat="server" datasourceid="MyAccessDataSource" /> <!-- Security Note: The AccessDataSource uses a QueryStringParameter, Security Note: which does not perform validation of input from the client. --> <asp:accessdatasource id="MyAccessDataSource" runat="server" datafile="Northwind.mdb" selectcommand="SELECT EmployeeID, LastName, Address, PostalCode, Country FROM Employees" filterexpression="Country = '{0}'"> <filterparameters> <asp:querystringparameter name="country" type="String" querystringfield="country" /> </filterparameters> </asp:accessdatasource> </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"> <HTML> <body> <form id="Form1" method="post" runat="server"> <!-- Use a Query String with country=USA --> <asp:GridView id ="GridView1" runat="server" DataSourceMode="DataSet" DataSourceID="MyAccessDataSource" /> <asp:AccessDataSource id="MyAccessDataSource" runat="server" DataFile="Northwind.mdb" SelectCommand="SELECT EmployeeID, LastName, Address, PostalCode, Country FROM Employees" FilterExpression="Country = '@country'"> <FilterParameters> <asp:QueryStringParameter Name="country" Type="String" QueryStringField="country" /> </FilterParameters> </asp:AccessDataSource> </form> </body> </HTML>
QueryStringParameter を宣言し、SQL パラメータ クエリを使って、Access データベースのデータを表示する方法を次のコード例に示します。GridView コントロールに表示するレコードは、AccessDataSource によって取得されます。GridView は、ユーザーが Northwind Traders Orders テーブルのレコードを選択してボタンをクリックしたときのレコードの順序を更新するためのユーザー インターフェイスを備え、編集することもできます。
<%@Page Language="VB" %> <%@Import Namespace="System.Data" %> <%@Import Namespace="System.Data.Common" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <SCRIPT runat="server"> Private Sub UpdateRecords(source As Object, e As EventArgs) ' This method is an example of batch updating using a ' data source control. The method iterates through the rows ' of the GridView, extracts each CheckBox from the row and, if ' the CheckBox is checked, updates data by calling the Update ' method of the data source control, adding required parameters ' to the UpdateParameters collection. Dim cb As CheckBox Dim row As GridViewRow For Each row In GridView1.Rows cb = CType(row.Cells(0).Controls(1), CheckBox) If cb.Checked Then Dim oid As String oid = CType(row.Cells(1).Text, String) Dim param1 As New Parameter("date", TypeCode.DateTime, DateTime.Now.ToString()) MyAccessDataSource.UpdateParameters.Add(param1) Dim param2 As New Parameter("orderid", TypeCode.String, oid) MyAccessDataSource.UpdateParameters.Add(param2) MyAccessDataSource.Update() MyAccessDataSource.UpdateParameters.Clear() End If Next End Sub ' UpdateRecords </SCRIPT> <HTML> <BODY> <FORM runat="server"> <!-- Security Note: The SqlDataSource uses a QueryStringParameter, Security Note: which does not perform validation of input from the client. Security Note: To validate the value of the QueryStringParameter, handle the Selecting event. --> <asp:SqlDataSource id="MyAccessDataSource" runat="server" ProviderName="<%$ ConnectionStrings:MyPasswordProtectedAccess.providerName%>" ConnectionString="<%$ ConnectionStrings:MyPasswordProtectedAccess%>" SelectCommand="SELECT OrderID, OrderDate, RequiredDate, ShippedDate FROM Orders WHERE EmployeeID=?" UpdateCommand="UPDATE Orders SET ShippedDate=? WHERE OrderID = ?"> <SelectParameters> <asp:QueryStringParameter Name="empId" QueryStringField="empId" /> </SelectParameters> </asp:SqlDataSource> <asp:GridView id ="GridView1" runat="server" DataSourceID="MyAccessDataSource" AllowPaging="True" PageSize="10" AutoGenerateColumns="False"> <columns> <asp:TemplateField HeaderText=""> <ItemTemplate> <asp:CheckBox runat="server" /> </ItemTemplate> </asp:TemplateField> <asp:BoundField HeaderText="Order" DataField="OrderID" /> <asp:BoundField HeaderText="Order Date" DataField="OrderDate" /> <asp:BoundField HeaderText="Required Date" DataField="RequiredDate" /> <asp:BoundField HeaderText="Shipped Date" DataField="ShippedDate" /> </columns> </asp:GridView> <asp:Button id="Button1" runat="server" Text="Update the Selected Records As Shipped" OnClick="UpdateRecords" /> <asp:Label id="Label1" runat="server" /> </FORM> </BODY> </HTML>
<%@Page Language="C#" %> <%@Import Namespace="System.Data" %> <%@Import Namespace="System.Data.Common" %> <!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 UpdateRecords(Object source, EventArgs e) { // This method is an example of batch updating using a // data source control. The method iterates through the rows // of the GridView, extracts each CheckBox from the row and, if // the CheckBox is checked, updates data by calling the Update // method of the data source control, adding required parameters // to the UpdateParameters collection. CheckBox cb; foreach(GridViewRow row in this.GridView1.Rows) { cb = (CheckBox) row.Cells[0].Controls[1]; if(cb.Checked) { string oid = (string) row.Cells[1].Text; MyAccessDataSource.UpdateParameters.Add(new Parameter("date" ,TypeCode.DateTime,DateTime.Now.ToString())); MyAccessDataSource.UpdateParameters.Add(new Parameter("orderid" ,TypeCode.String,oid)); MyAccessDataSource.Update(); MyAccessDataSource.UpdateParameters.Clear(); } } } </SCRIPT> <HTML> <BODY> <FORM runat="server"> <!-- Security Note: The SqlDataSource uses a QueryStringParameter, Security Note: which does not perform validation of input from the client. Security Note: To validate the value of the QueryStringParameter, handle the Selecting event. --> <asp:SqlDataSource id="MyAccessDataSource" runat="server" ProviderName="<%$ ConnectionStrings:MyPasswordProtectedAccess.providerName%>" ConnectionString="<%$ ConnectionStrings:MyPasswordProtectedAccess%>" SelectCommand="SELECT OrderID, OrderDate, RequiredDate, ShippedDate FROM Orders WHERE EmployeeID=?" UpdateCommand="UPDATE Orders SET ShippedDate=? WHERE OrderID = ?"> <SelectParameters> <asp:QueryStringParameter Name="empId" QueryStringField="empId" /> </SelectParameters> </asp:SqlDataSource> <asp:GridView id ="GridView1" runat="server" DataSourceID="MyAccessDataSource" AllowPaging="True" PageSize="10" AutoGenerateColumns="False"> <columns> <asp:TemplateField HeaderText=""> <ItemTemplate> <asp:CheckBox runat="server" /> </ItemTemplate> </asp:TemplateField> <asp:BoundField HeaderText="Order" DataField="OrderID" /> <asp:BoundField HeaderText="Order Date" DataField="OrderDate" /> <asp:BoundField HeaderText="Required Date" DataField="RequiredDate" /> <asp:BoundField HeaderText="Shipped Date" DataField="ShippedDate" /> </columns> </asp:GridView> <asp:Button id="Button1" runat="server" Text="Update the Selected Records As Shipped" OnClick="UpdateRecords" /> <asp:Label id="Label1" runat="server" /> </FORM> </BODY> </HTML>
<%@Page Language="VJ#" %> <%@Import Namespace="System.Data" %> <%@Import Namespace="System.Data.Common" %> <!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 UpdateRecords(Object source, System.EventArgs e) { // This method is an example of batch updating using a // data source control. The method iterates through the rows // of the GridView, extracts each CheckBox from the row and, if // the CheckBox is checked, updates data by calling the Update // method of the data source control, adding required parameters // to the UpdateParameters collection. CheckBox cb; for (int iCtr = 0; iCtr < this.GridView1.get_Rows().get_Count(); iCtr++) { GridViewRow row = this.GridView1.get_Rows().get_Item(iCtr); cb = (CheckBox)row.get_Cells().get_Item(0).get_Controls().get_Item(1); if (cb.get_Checked()) { String oid = (String)(row.get_Cells().get_Item(1).get_Text()); MyAccessDataSource.get_UpdateParameters().Add(new Parameter( "date", System.TypeCode.DateTime, System.DateTime.get_Now().ToString())); MyAccessDataSource.get_UpdateParameters().Add(new Parameter( "orderid", System.TypeCode.String, oid)); MyAccessDataSource.Update(); MyAccessDataSource.get_UpdateParameters().Clear(); } } } //UpdateRecords </SCRIPT> <HTML> <BODY> <FORM runat="server"> <!-- Security Note: The SqlDataSource uses a QueryStringParameter, Security Note: which does not perform validation of input from the client. Security Note: To validate the value of the QueryStringParameter, handle the Selecting event. --> <asp:SqlDataSource id="MyAccessDataSource" runat="server" ProviderName="System.Data.OleDb" ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\uncpath\Northwind_PasswordProtected.mdb;Mode=3;Jet OLEDB:Database Password=myPassword;" SelectCommand="SELECT OrderID, OrderDate, RequiredDate, ShippedDate FROM Orders WHERE EmployeeID=?" UpdateCommand="UPDATE Orders SET ShippedDate=? WHERE OrderID = ?"> <SelectParameters> <asp:QueryStringParameter Name="empId" QueryStringField="empId" /> </SelectParameters> </asp:SqlDataSource> <asp:GridView id ="GridView1" runat="server" DataSourceID="MyAccessDataSource" AllowPaging="True" PageSize="10" AutoGenerateColumns="False"> <Columns> <asp:TemplateField HeaderText=""> <ItemTemplate> <asp:CheckBox runat="server" /> </ItemTemplate> </asp:TemplateField> <asp:BoundField HeaderText="Order" DataField="OrderID" /> <asp:BoundField HeaderText="Order Date" DataField="OrderDate" /> <asp:BoundField HeaderText="Required Date" DataField="RequiredDate" /> <asp:BoundField HeaderText="Shipped Date" DataField="ShippedDate" /> </Columns> </asp:GridView> <asp:Button id="Button1" runat="server" Text="Update the Selected Records As Shipped" OnClick="UpdateRecords" /> <asp:Label id="Label1" runat="server" /> </FORM> </BODY> </HTML>
継承階層System.Web.UI.WebControls.Parameter
System.Web.UI.WebControls.QueryStringParameter
スレッド セーフ
プラットフォーム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 によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。
バージョン情報
参照- QueryStringParameter クラスのページへのリンク
重要 :