0

我正在迭代一个 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'oh

用这个例子:http ://www.ehow.com/way_5901555_tutorial-sql-stored-procedures.html

我看不到如何将表单值放入程序中?

4

2 回答 2

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 注入攻击的可能性。

于 2013-02-26T15:38:41.253 回答
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

然后,您将通过您的代码调用此存储过程,就像您发布的文章一样。

于 2013-02-26T15:36:33.593 回答