2009-07-07 52 views
1

我正在嘗試使用經典ASP更新SQL 2000中的NText字段。這是我用來做的代碼。任何人有任何關於如何加速它的指針?或者我堅持下去。更新導致長時間延遲/超時的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 2009-07-07 21:52:17

+0

數據只是文本,從200到300個字符一直到10或12k。 – 2009-07-08 00:40:57

回答

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