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