【问题标题】:ASP.NET / VB.NET : Generate Insert CommandASP.NET / VB.NET:生成插入命令
【发布时间】:2012-05-24 19:39:58
【问题描述】:

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

【问题讨论】:

标签: asp.net sql database


【解决方案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 来取消数据操作。

【讨论】:

  • 这就够了。此时我的字段已经被验证了。我只是希望我可以自动生成参数字段,就像我能够使用 select 语句一样......也许我只是懒惰大声笑
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    • 2011-03-12
    • 2022-08-18
    • 2018-05-01
    相关资源
    最近更新 更多