ASP.NET / VB.NET:生成插入命令

时间:2012-05-24 19:39:58

标签: asp.net sql database

我的代码隐藏中包含了所有表单变量,它们都是使用“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生成的插入语句中,而无需手动编写参数代码?

2 个答案:

答案 0 :(得分: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的值,然后由数据源控件使用它,例如您正在使用的数据源控件公开的选择,更新,插入或删除事件。如果参数的值未通过验证测试,则可以通过将关联的CancelEventArgs类的Cancel属性设置为true来取消数据操作。

答案 1 :(得分:0)

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

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