JScript (JavaScript) 呼叫 Connection.Execute(sql, recordsAffected, options) 時,recordsAffected 永遠保持初始值,無法取得影響列數。VBScript 同樣呼叫卻正常。
JScript **不支援 ByRef (傳址) 參數**,COM 介面的 recordsAffected 為 [out] 參數,需呼叫端提供可寫入的變數位址。JScript 變數為值型別,無法滿足。
<%@ Language=JScript %>
<%
var conn = Server.CreateObject("ADODB.Connection");
conn.Open(connStr);
var sql = "UPDATE T SET ...";
var rows = 0;
// 呼叫 VBScript 子程序
ExecCommand(sql, rows); // rows 為 JScript 變數,但 VBScript 以 ByRef 接收
Response.Write("影響列數: " + rows);
%>
<script language="VBScript" runat="server">
Sub ExecCommand(sql, ByRef affected)
On Error Resume Next
conn.Execute sql, affected
If Err.Number <> 0 Then affected = -1
End Sub
</script>
Recordset.Open 並讀取 Recordset.RecordCount(需 adOpenKeyset 或 adOpenStatic)。SELECT @@ROWCOUNT 並用 Recordset 讀取。JScript 與 COM 互操作的 ByRef 參數缺陷,需透過支援 ByRef 的語言(VBScript、C#、VB.NET)包裝解決。