我正在迭代一个html表。
每行都有一个id,该表有2列/ 2个属性。
这是我的循环:
Dim id
Dim prop1
Dim prop2
For Each id In Request.Form("id")
prop1 = Request.Form(id & "_prop1")
prop1 = Request.Form(id & "_prop2")
Next
想象一下,我想更新数据库中的数据...我可能会放入该循环
"UPDATE table SET prop1 = '" & prop1 & "', prop2 = '" & prop2 & "'" WHERE id = '" & id &
"'"
什么是SQL存储过程?如何为此操作实现一个?
例如,在此链接中:http://www.albofish.co.uk/ms-sql-stored-procedures-and-classic-asp/
我没有看到你要更新的表格......我只是不理解它。 d'哦
使用此示例:http://www.ehow.com/way_5901555_tutorial-sql-stored-procedures.html
我无法看到我如何将表单值放入过程中?
答案 0 :(得分:4)
存储过程存在于后端数据库中,而不是ASP代码中。您发布的链接中可能令您感到困惑的是它包含用于执行服务器端过程的客户端代码,该代码未显示。
在您的情况下,实际的存储过程本身看起来像这样:
CREATE PROCEDURE dbo.MyProcedure
(
@prop1 varchar(255), --Fill in appropriate data types if necessary
@prop2 varchar(255),
@id int
)
AS
SET NOCOUNT ON;
UPDATE table
SET prop1 = @prop1,
prop2 = @prop2
WHERE id = @id;
(@ sgeddes是正确的,该程序应包括SET NOCOUNT ON
。我已将此添加到我的示例中。)
然后,您将使用以下客户端代码来调用该过程(我已经编辑了链接中的代码,以便更容易理解)。
'Create ADO command
Set cmd = Server.CreateObject("ADODB.Command")
With cmd
'Set up DB connection to use, set the type of SQL command
.ActiveConnection = db
.CommandType = adCmdStoredProc
.CommandText = "dbo.MyProcedure" ' Set the name of the Stored Procedure to use
'Add a 255 character varchar parameter
.Parameters.Append .CreateParameter("@prop1",adVarChar, adParamInput, 255)
.Parameters("@prop1") = "Prop 1 Value"
'Add a 255 character varchar parameter
.Parameters.Append .CreateParameter("@prop2",adVarChar, adParamInput, 255)
.Parameters("@prop2") = "Prop 2 Value"
'Add a integer parameter, then pass the value of the variable userID to it
.Parameters.Append .CreateParameter("@id",adInteger, adParamInput)
.Parameters("@id") = userID
'Execute the command
.Execute
End With
'Clean up
set cmd = nothing
这显然比你现在拥有的代码多得多。那你为什么要这样做呢?最重要的原因是安全。通过创建参数化过程并在参数中传递值,可以大大降低任何类型的SQL注入攻击的可能性。
答案 1 :(得分:0)
SQL存储过程与ASP函数不同 - 存储过程是您在数据库中创建的。根据您的RDBMS,语法会有所不同。但是这样的事情:
CREATE PROCEDURE UpdateYourTable
@id int,
@prop1 nvarchar(50).
@prop2 nvarchar(50)
AS
SET NOCOUNT ON;
UPDATE table
SET prop1 = @prop1, prop2 = @prop2
WHERE id = @id
GO
然后,您将通过您的代码调用此存储过程,就像您发布的文章一样。