更新文本导致长时间延迟/超时

时间:2009-07-07 21:06:08

标签: asp-classic sql-server-2000 ado

我正在尝试使用Classic ASP更新SQL 2000中的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的逐字逐句。

1 个答案:

答案 0 :(得分: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