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 不会以任何方式验证表单元素传递的值;它使用原始值。在大多数情况下,您可以在数据源控件使用 FormParameter 之前通过处理一个事件来验证它的值,例如您正在使用的数据源控件公开的 Selecting、Updating、Inserting 或 Deleting 事件。如果参数的值未通过验证测试,您可以通过将关联的 CancelEventArgs 类的 Cancel 属性设置为 true 来取消数据操作。

于 2012-05-24T19:49:16.603 回答
0

强行附加参数可能更好。当您从 Form 和 Session (ick) 中获取值时,参数化 SQL 将为您提供一些保护措施。

您可能想探索代码生成(A-la T4),这样您可以将 codegen 指向 proc/table,它将生成 vb 代码来调用它,附加参数并执行语句。

于 2012-05-24T19:45:42.840 回答