0

コードビハインドにすべてのフォーム変数があり、それらはすべて「Request.Form」を使用して取得されました。

私が知る限り..SQLDataSourceを使用してこれを行う場合、ASP.NET Controllsを使用する必要があります(これは望ましくありません)。

INSERT INTO Orders(FirstName, LastName, Email, PhoneNumber, Address, City, State, ZipCode, PaymentMethod, PromoCode, OrderStatus, Tracking, PPEmail, SubmissionDate) VALUES (@FirstName, @LastName, @Email, @Phone, @Address, @City, @State, 11111, @PaymentMethod', '0', 'New Order - Pending', '0', @PPEMAIL, @Date)

コードビハインド

    Dim fPrice As String = CType(Session.Item("Qprice"), String)
    Dim DeviceMake As String = CType(Session.Item("Make"), String)
    Dim PaymentMethod As String = Request.Form("Payment Type")
    Dim DeviceModel As String = CType(Session.Item("Model"), String)
    Dim DeviceCondition As String = CType(Session.Item("Condition"), String)
    Dim SubmissionDate As String = Date.Now.ToString
    Dim FirstName = Request.Form("First")
    Dim LastName = Request.Form("Last")
    Dim City = Request.Form("City")
    Dim Phone = Request.Form("Phone")
    Dim Address = Request.Form("Address")
    Dim State = Request.Form("State")
    Dim Zip = Request.Form("Zip")
    Dim Email = Request.Form("EMail")

パラメータを手動でコーディングせずに、SQLDatasource によって生成された挿入ステートメントに変数をアタッチする方法はありますか?

4

2 に答える 2

1

を使用できますFormParameter。私が知っている限り、これには ASP.NET コントロールは必要ありません。

  <asp:sqldatasource
    id="SqlDataSource1"
    runat="server"
    connectionstring="<%$ ConnectionStrings:MyNorthwind %>"
    selectcommand="SELECT CompanyName,ShipperID FROM Shippers"
    insertcommand="INSERT INTO Shippers (CompanyName,Phone) VALUES (@CoName,@Phone)">
      <insertparameters>
        <asp:formparameter name="CoName" formfield="CompanyNameBox" />
        <asp:formparameter name="Phone"  formfield="PhoneBox" />
      </insertparameters>
  </asp:sqldatasource>

このメカニズムに関連する Microsoft の警告に特に注意してください。

FormParameter は、フォーム要素から渡された値をまったく検証しません。生の値を使用します。ほとんどの場合、使用しているデータ ソース コントロールによって公開される Selecting、Updating、Inserting、または Deleting イベントなどのイベントを処理することにより、データ ソース コントロールによって使用される前に FormParameter の値を検証できます。パラメーターの値が検証テストに合格しない場合は、関連する CancelEventArgs クラスの Cancel プロパティを true に設定することにより、データ操作をキャンセルできます。

于 2012-05-24T19:49:16.603 に答える
0

パラメータを強制的にアタッチする方が良いでしょう。フォームとセッション(ick)から値を取得しているときに、SQLをパラメーター化すると、ある程度の保護が得られます。

コード生成(A-la T4)を検討することをお勧めします。この方法で、codegenをproc / tableにポイントすると、vbコードが生成されて呼び出され、paramsがアタッチされ、ステートメントが実行されます。

于 2012-05-24T19:45:42.840 に答える