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 クラスのページへのリンク