首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >适用于ASP的SQL Server存储过程

适用于ASP的SQL Server存储过程
EN

Stack Overflow用户
提问于 2013-02-26 23:14:05
回答 2查看 5.1K关注 0票数 0

我正在迭代一个html表。

每一行都有一个id,表有2列/2个属性。

下面是我的循环:

代码语言:javascript
运行
复制
Dim id
    Dim prop1
    Dim prop2

For Each id In Request.Form("id")
    prop1 = Request.Form(id & "_prop1")
    prop1 = Request.Form(id & "_prop2")
Next

假设我想要更新数据库中的数据...我可能会把它放进那个循环

代码语言:javascript
运行
复制
"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

我不知道如何将我的表单值放入过程中?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-26 23:38:41

存储过程驻留在后端数据库中,而不是ASP代码中。在您发布的链接中,可能会让您感到困惑的是,它包含了用于执行服务器端过程的客户端代码,并没有显示出来。

在您的示例中,实际的存储过程本身将如下所示:

代码语言:javascript
运行
复制
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。我已经将其添加到我的示例中。)

然后,您可以使用以下客户端代码来调用该过程(我已经编辑了您的链接中的代码,以便更容易理解)。

代码语言:javascript
运行
复制
'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注入攻击的可能性。

票数 4
EN

Stack Overflow用户

发布于 2013-02-26 23:36:34

SQL存储过程不同于ASP函数--存储过程是您在数据库中创建的东西。语法因您的RDBMS而异。但是像这样的东西:

代码语言:javascript
运行
复制
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

然后,您将通过您的代码调用此存储过程,这与您发布的文章非常相似。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15092616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档