2012-10-15 3 views
0

У меня есть классическое приложение asp (ASP 3.0, работающее под управлением Windows 2000/IIS 5.0), которое позволяет пользователям писать собственные SQL-запросы для извлечения данных из базы данных (Oracle 10g), как и SQL Developer. Иногда пользователи пишут сложные запросы, которые выполняются неопределенно долго, хотя пользователь будет нажимать кнопку «Назад», чтобы вернуться на предыдущую страницу, запрос может все еще выполняться в базе данных. Теперь пользователи запрашивают у них функциональность, чтобы убить запрос одним нажатием кнопки.classic asp async sql-исполнение

Я новичок в asp, поэтому я не уверен, что это возможно в asp. Мы используем объект ADODB.RecordSet для извлечения данных с помощью RecordSet.Open и RecordSet.GetRows. Пожалуйста, сообщите, насколько это возможно в классическом asp.

Set connection = Server.CreateObject("ADODB.Connection") 
connection.Open DATA_SOURCE, LOGON_ID, PASSWORD 
Set resultset = Server.CreateObject("ADODB.Recordset") 
Dim sql 
sql="select sysdate from dual" 
resultset.Open sql, connection 
Dim DBData 
DBData = resultset.GetRows(NUMROWS) 
resultset.close 
connection.close 
Set resultset = Nothing 
Set connection = Nothing 
+0

Не уверен, если это поможет, но вы могли бы попытаться обернуть функции базы данных в ' Class' и закройте соединение в 'Private Sub Class_Terminate'. – Passerby

+0

Вам необходимо вызвать метод Connection.Cancel. Другим вариантом будет использование транзакций и вызов Connection.RollbackTrans. Если запросы выполняются как своего рода фоновый процесс ... вы можете только вызвать Session.abandon (обратите внимание, что это уничтожит ВСЕ переменные и объекты сеанса пользователя ... не только один запрос базы данных) – AardVark71

+0

Является ли sysdate полем. Поскольку такого ключевого слова нет в sql – polin

ответ

0

Попробуйте

arrayRs = resultset.GetRows() 
if arrayRs(0,0)<> "" then 
response.write(arrayRs(0,0)) 
end if 

Или вы можете попробовать петлю, когда вы забирающий более чем одно поле