2009-07-07 1 views
1

Я пытаюсь обновить поле NText в SQL 2000 с использованием классического ASP. Вот код, который я использую для этого. У любого есть какие-то указатели на то, как, возможно, ускорить его? Или я застрял с ним.Обновление NText, вызывающее длительные задержки/таймауты

set Cnn = server.CreateObject("ADODB.connection") 
Cnn.ConnectionString = Application("Cnn_ConnectionString") 
Cnn.open 
set rs = server.CreateObject("ADODB.Recordset") 

rs.CursorType = adoOpenDynamic 
rs.LockType = adLockOptimistic  
conChunkSize = 100 
rs.Open "MyTable",Cnn, , , adCmdTable 
rs.Find "MyDataId=" & request("DataId"),,adSearchForward,1  

lngOffset = 0 
lngLogoSize = len(request("txtMyEntry"))*2 
Do while lngOffset < lngLogoSize 
    varChunk = LeftB(RightB(request("txtMyEntry"), lngLogoSize - _ 
       lngOffset), conChunkSize) 
     rs("MyDataField").AppendChunk varChunk 
     lngOffset = lngOffset + conChunkSize 
    Loop 

rs.Update 
rs.Close 

О, и этот код почти дословно из MSDN site.

+0

Это поможет вам определить, сколько данных вы на самом деле пишете в поле. – AnthonyWJones

+0

Данные - это всего лишь текст, в любом месте от 200 до 300 символов, вплоть до 10 или 12k. –

ответ

2

Во-первых, я бы устранил чередование, которое составляет 90 секунд.

Тогда есть: -

rs.Open "MyTable",Cnn, , , adCmdTable 
rs.Find "MyDataId=" & request("DataId"),,adSearchForward,1 

Хлоп! Вы хотели бы думать, что ADO разумно попросил SQL-сервер найти эту запись на основе индексированного поля MyDataId, но не делайте ставки. Скорее всего, он потянет все содержимое таблицы до тех пор, пока запись не будет достигнута.

Это действительно должно быть сделано с помощью инструкции UPDATE T-SQL и объекта ADODB.Command.

Set cmd = Server.CreateObject("ADODB.Command") 
cmd.ActiveConnection = cnn 
cmd.CommandType = 1 '' // adCmdText 
cmd.CommandText = "UPDATE MyTable SET MyDataField = ? WHERE MyDataId = ?" 
cmd.Parameters.Append cmd.CreateParameter("dataField", 203, 1, Len(txtMyEntry), txtMyEntry) '' // 203 = asLongVarWChar, 1 = adParamInput 
cmd.Parameters.Append cmd.CreateParameter("id", 3, 1, , CInt(DataID)) '' // 3 = adInteger 
cmd.Execute 
+0

Я бы хотел быть частью проблемы именно в этом. Не совсем уверен, что я понимаю ваш пример кода, но завтра я сделаю это. –

+0

Эй, спасибо за помощь в этом. Однако мне пришлось сделать небольшое изменение. Мне пришлось изменить CInt(), это просто Int(), поскольку это вызывало переполнение. Хотя даже используя его как строку, он все равно принял его. Еще раз спасибо. –