Sql 经典asp.NET中的循环更新语句

Sql 经典asp.NET中的循环更新语句,sql,loops,asp-classic,Sql,Loops,Asp Classic,我真的需要一些关于这个代码的帮助。当选择了4条记录时,循环仅使update语句运行一次,因此它必须循环4次。这是我第一次遇到这个问题,我似乎不明白为什么它会这样做。请帮忙。多谢各位 <!--#include file="connectionString.inc"--> <% Dim strmode, arrmode,i,rs,SQLstr, a, b, site_to strmode=Request.form("changeBox") cont1=request.form(

我真的需要一些关于这个代码的帮助。当选择了4条记录时,循环仅使update语句运行一次,因此它必须循环4次。这是我第一次遇到这个问题,我似乎不明白为什么它会这样做。请帮忙。多谢各位

<!--#include file="connectionString.inc"-->
<%
Dim strmode, arrmode,i,rs,SQLstr, a, b, site_to


strmode=Request.form("changeBox")
cont1=request.form("cont1")
arrmode=split(strmode,",")




if request.form("submitChange") = "" then
    response.write("Please try again, you have no selected anything. Press back on your browser")
end if
   if request.form("submitChange") = "site" then
    response.write(b)
    for i = 0 to UBound(arrmode)
        SQLstr = "UPDATE SCSer SET Ser_Site_Num = '" & request.form("site_to") & "' WHERE Ser_Num = '" & arrmode(i) & "'"
        Set rs = Server.CreateObject("ADODB.Recordset")
        rs.open SQLstr, conn, 1, 2       
        Response.Write("SUCCESSFULLY UPDATED! " + arrmode(i))
    next
end if

if request.form("submitChange") = "contract" then
    a=LBound(arrmode)
b=UBound(arrmode)
    SQLstr = "UPDATE SCSer SET Ser_Site_Num = '" & request.form("site_to") & "' WHERE Ser_Num BETWEEN '" & arrmode(a) & "' AND '" & arrmode(b) & "'"
    Set rs = Server.CreateObject("ADODB.Recordset")
    rs.open SQLstr, conn, 1, 2
    Response.Write("SUCCESSFULLY UPDATED! <br/>")
    response.write(arrmode(a)+"<br/>")
    response.write(arrmode(b))
end if
%>

试试这个,看看回答是什么:

<%
Dim strmode, arrmode,i,rs,SQLstr, a, b, site_to
Dim oConn

strmode=Request.form("changeBox")
cont1=request.form("cont1")
arrmode=split(strmode,",")

Response.Write "submitChange is:" & request.form("submitChange") & "<br>"


if request.form("submitChange") = "" then
    response.write("Please try again, you have not selected anything. Press back on your browser")
    Response.end
end if

set oConn = Server.CreateObject("ADODB.Connection")
oConn.Open conn

if request.form("submitChange") = "site" then
    for i = 0 to UBound(arrmode)
        SQLstr = "UPDATE SCSer SET Ser_Site_Num = '" & request.form("site_to") & "' WHERE Ser_Num = '" & Trim(arrmode(i)) & "'"
        Response.Write "Executing SQL: "& SQLstr &"<br>"
        oConn.Execute(SQLstr)      
        Response.Write("SUCCESSFULLY UPDATED! " + arrmode(i))
    next
end if

if request.form("submitChange") = "contract" then
    a=LBound(arrmode)
    b=UBound(arrmode)
    SQLstr = "UPDATE SCSer SET Ser_Site_Num = '" & request.form("site_to") & "' WHERE convert(int,Ser_Num) BETWEEN " & arrmode(a) & " AND " & arrmode(b) & ""
    Response.Write "Executing SQL: "& SQLstr &"<br>"
    oConn.Execute(SQLstr)    
    Response.Write("SUCCESSFULLY UPDATED! <br/>")
    response.write(arrmode(a)+"<br/>")
    response.write(arrmode(b))
end if
%>


您确定arrmode实际上有多条记录吗?UBound(arrmode)返回什么?顺便说一句,这种代码只是要求进行依赖项注入攻击。ADO支持参数化查询。它们更安全、更快、更易于编写。i UBound(arrmode)返回存储在数组中的记录数。我不知道依赖注入攻击是什么,也不知道如何做ADO位。你能帮我吗?uBond(arrmode)的价值是多少?我打赌是1,而不是你想的。只需做一个响应。编写,或者更好的是,调试应用程序,看看是什么模式contains@PanagiotisKanavos当我选择3条记录时,ubound(arrmode)表示2,因此它是正确的,它循环了3次,但sql语句运行了一次。我稍微更改了代码,而不是直接从连接字符串运行它。我通过ADO运行它。下面是当前代码
Ser\u Site\u Num
Ser\u Num
的数据类型是什么?(您可以编辑您的问题以将代码更新为您现在使用的代码,而不是使用“注释”部分)它是这样说的:submitChange是:site Executing SQL:update SCSer SET Ser_site_Num='sungard03',其中Ser_Num='53852'处理URL时服务器上发生错误。请与系统管理员联系。如果您是系统管理员,请单击此处了解有关此错误的详细信息。如果您更改了代码,我认为
conn
是一个连接,我再次尝试了它,下面是输出提交更改是:site Executing SQL:UPDATE SCSer SET Ser_site_Num='sungard03',其中Ser_Num='53852'已成功更新!53852执行SQL:更新SCSer集合Ser_Site_Num='sungard03',其中Ser_Num='53853'已成功更新!53853正在执行SQL:UPDATE SCSer SET Ser_Site_Num='sungard03',其中Ser_Num='53854'已成功更新!53854正在执行SQL:UPDATE SCSer SET Ser_Site_Num='sungard03',其中Ser_Num='53855'已成功更新!53855即使这是输出,其他记录仍显示尚未更新,但只有第一条记录更新。您的所有“Ser_Site_Num”都将更新为“sungard03”;这就是你想要的吗?