【问题标题】:How to get affected rows in ASP Classic JScript?如何在 ASP Classic JScript 中获取受影响的行?
【发布时间】:2018-07-11 08:03:39
【问题描述】:

我在 ASP Classic 中有以下脚本:

<%@ LANGUAGE=Javascript%>
<%
    var dataConn = Server.CreateObject('ADODB.Connection');
    dataConn.Open(connectionString);
    var rowsAffected;
    dataConn.Execute(command, rowsAffected);
    Response.Write(rowsAffected);
    dataConn.Close();
%>

执行脚本时 rowsAffected 未定义。如何获取受影响的行?

【问题讨论】:

  • command 定义在哪里?
  • 它是任何 SELECT、UPDATE、INSERT、DELETE 语句。在这里不重要。
  • 另外:当我在 VBScript 中尝试相同的操作时,rowsAffected 得到 -1。
  • 另外,这是 JScript,而不是 JavaScript。不要让您可以使用 @LANGUAGE directive 作为 JavaScript 的事实欺骗您,它只是 JScript 的别名。
  • 你可以在同一个asp文件中混合多种语言...

标签: asp-classic adodb jscript


【解决方案1】:

在网上搜索后,我找到了一个答案,即 JScript 不支持 ByRef 变量来获取受影响的行。它仅适用于 VBScript。

所以我使用以下脚本从我的存储过程中获取受影响的行:

<!--METADATA TYPE="TypeLib" NAME="Microsoft ActiveX Data Objects 2.6 Library" UUID="{00000206-0000-0010-8000-00AA006D2EA4}" VERSION="2.6" -->
<%@ LANGUAGE=JScript%>
<%
    var cn = Server.CreateObject('ADODB.Connection');
    var cs = '...';
    cn.Open(cs); cn.CursorLocation = adUseClient;

    var cmd = Server.CreateObject("ADODB.Command");
    cmd.ActiveConnection = cn;
    cmd.CommandText = '...';
    cmd.CommandType = adCmdStoredProc;

    cmd.Parameters.Append(cmd.CreateParameter('@ID', adInteger, adParamInput, 4, id));
    cmd.Parameters.Append(cmd.CreateParameter('@RowCount', adInteger, adParamOutput, 4));

    cmd.Execute(adExecuteNoRecords);
    Response.Write(cmd.Parameters('@RowCount').Value);

    cn.Close();
%>

你需要一个这样的存储过程:

CREATE PROC dbo.<StoredProcedure> @ID int, @RowCount int = 0 output AS BEGIN

    [...]

    SET @RowCount = @@rowcount;

END

【讨论】:

    最近更新 更多