2012-02-20 3 views
1

Можно создать дубликат:
How can I get the # of rows affected by a statement using ADO with JavaScript?Получить пострадавших количество строк из ADODB & ASP с JScript

Мы используем MS-SQL7.0, ASP (с Jscript) там ISN 't любая проблема в запросе и выполнении. Но мы столкнулись с проблемой получения зараженного количества записей. Мы называем этот источник

http://support.microsoft.com/kb/195048

Вот наш исходный код

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 всегда называется значением.

+1

Вы правы; JScript не может передавать параметры по ссылке. См. [Этот аналогичный вопрос] (http://stackoverflow.com/questions/2216630/how-can-i-get-the-of-rows-affected-by-a-statement-using-ado-with-javascript). –

ответ

0

Метод Execute объекта объектов данных ActiveX (ADO) передает по ссылке целочисленное значение, которое можно использовать для извлечения количества записей, на которые влияет команда 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))) 

http://support.microsoft.com/kb/195048

+0

Благодаря г-ну Зее Ти, но мы не хотим получать данные или получить отсчет количества запросов. Мы хотим получить подсчет вычитаемых данных (например: вставка, обновление, удаление запроса). Хотелось бы, чтобы вы заметили меня, если бы вы это знали. :) – sizers

+0

Я не уверен, что можно получить # таких поврежденных строк, но потом я не слишком хорошо знаком с JScript. –

+0

ОК. Спасибо, в любом случае, Mr. Zee Tee :-) – sizers

0

В прошлом я попробовал два метода в таком случае (я согласен, немного колючий.).

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> 

2. РСУБД функции могут быть полезны. (вы сделали это)

<%@Language=JScript%> 
<% 
// 
// .. 
var query = "..."; 
//.. 
this.db.Execute(query); 
this.rowCount = this.db.Execute("Select @@ROWCOUNT").Fields.Item(0).Value; 
//.. 
this.db.Close(); 
//.. 
%>