Asp classic 从ADODB获取受影响的行数(&A);带JScript的ASP
可能重复:Asp classic 从ADODB获取受影响的行数(&A);带JScript的ASP,asp-classic,adodb,jscript,Asp Classic,Adodb,Jscript,可能重复: 我们正在使用MS-SQL7.0、ASP(带Jscript) 在查询和执行时没有任何问题。 但我们面临着一个问题,即记录计数受到影响。 我们指的是这个来源 这是我们的源代码 var query = "..."; this.db = Server.CreateObject("ADODB.Connection"); this.db.Open(this.connectionString); this.db.Execute(query, this.rowCo
我们正在使用MS-SQL7.0、ASP(带Jscript) 在查询和执行时没有任何问题。 但我们面临着一个问题,即记录计数受到影响。 我们指的是这个来源 这是我们的源代码
var query = "...";
this.db = Server.CreateObject("ADODB.Connection");
this.db.Open(this.connectionString);
this.db.Execute(query, this.rowCount);
Response.Write(this.rowCount);
or
var query = "...";
this.db = Server.CreateObject("ADODB.Connection");
this.cmd = Server.CreateObject("ADODB.Command");
this.cmd.ActiveConnection = this.db;
this.cmd.CommandText = query;
this.cmd.Execute(this.rowCount);
Response.Write(this.rowCount);
但此代码不起作用,rowCount
被设置为其初始值(0)。
我认为这是因为javascript中的基元类型总是按值调用。ActiveX数据对象(ADO)命令对象的Execute方法通过引用传递一个整数值,您可以使用该整数值检索受SQL UPDATE命令影响的记录数
#DEFINE adModeReadWrite 3
#DEFINE adCmdText 1
oConnection = CREATEOBJECT("ADODB.Connection")
oCommand = CREATEOBJECT("ADODB.Command")
lcConnString = "DRIVER={SQL Server};" + ;
"SERVER=YourServerName;" + ;
"DATABASE=pubs"
lcUID = "YourUserID"
lcPWD = "YourPassword"
oConnection.ATTRIBUTES = adModeReadWrite
oConnection.OPEN(lcConnString, lcUID, lcPWD )
* Use the command object to perform an UPDATE
* and return the count of affected records.
strSQL = "UPDATE roysched SET royalty = royalty * 1.5"
liRecordsAffected = 0
WITH oCommand
.CommandType = adCmdText
.ActiveConnection = oConnection
.CommandText = strSQL
.Execute(@liRecordsAffected)
ENDWITH
=MESSAGEBOX("Records affected: " + LTRIM(STR(liRecordsAffected)))
* Set the royalty column back to its previous value.
strSQL = "UPDATE roysched SET royalty = royalty / 1.5"
liRecordsAffected = 0
WITH oCommand
.CommandType = adCmdText
.ActiveConnection = oConnection
.CommandText = strSQL
.Execute(@liRecordsAffected)
ENDWITH
=MESSAGEBOX("Records affected: " + LTRIM(STR(liRecordsAffected)))
过去我在这种情况下尝试过两种方法(我同意,有点发痒)。
1。混合语言
<%@Language=JScript%>
<%
//
// ..
this.query = "..."; // required
this.rowCount = 0; // required
ExecCommand(this);
//..
this.db.Close();
//..
%>
<script language="vbscript" runat="server">
Sub ExecCommand(obj)
Dim intAffectedRows
obj.db.Execute obj.query, intAffectedRows
obj.rowCount = intAffectedRows 'assign rowCount
End Sub
</script>
子执行命令(obj)
暗淡无效果的阴影
obj.db.Execute obj.query,intAffectedRows
obj.rowCount=intAffectedRows的分配rowCount
端接头
2。RDBMS功能可能很有用。(您做到了这一点)
感谢Zee Tee先生,但我们不想获取数据或检索到的查询记录计数。我们希望获得执行数据的计数(例如:插入、更新、删除查询)。如果你也知道的话,我希望你能注意到我我不确定是否有可能获得像这样的受影响行的#,但我对JScript.OK也不太熟悉。无论如何,谢谢你,泽·蒂先生:-)试试这个:谢谢。Zee Tee先生:)。但这正是我创建并应用于我们的JScript源代码的。在主要文章中描述。refrenece必须调用变量liRecordsAffected。但在javascript中,我认为无法通过引用调用基元类型;JScript无法通过引用传递参数。看见
<%@Language=JScript%>
<%
//
// ..
var query = "...";
//..
this.db.Execute(query);
this.rowCount = this.db.Execute("Select @@ROWCOUNT").Fields.Item(0).Value;
//..
this.db.Close();
//..
%>