【问题标题】:Updateing NText causing long delay/timeouts更新文本导致长时间延迟/超时
【发布时间】:2010-11-08 20:30:35
【问题描述】:

我正在尝试使用 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 的逐字记录。

【问题讨论】:

  • 它将帮助您指定实际写入该字段的数据量。
  • 数据只是文本,从 200 到 300 个字符一直到 10 或 12k。

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


【解决方案1】:

首先我会消除 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

【讨论】:

  • 我愿意成为问题的一部分就是这样。不太确定我是否理解您的示例代码,但我明天会试一试。
  • 您好,感谢您的帮助。不过,我确实必须对其进行一点小改动。我不得不更改 CInt(),它只是 Int(),因为它会导致溢出。尽管即使将它用作字符串,它仍然接受它。再次感谢。
猜你喜欢
  • 2013-01-04
  • 1970-01-01
  • 2014-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多