2009-07-07 37 views
1

Classic 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

+0

データはテキストだけで、200〜300文字の範囲で最大10または12kまでです。 –

答えて

2

まずは90sのチャンクを削除します。

次にあります: -

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

む〜!あなたは、ADOがインテリジェントに、インデックスされたMyDataIdフィールドに基づいてそのレコードを見つけるようにSQLサーバに依頼したが、そうしないと賭けていると思っていると思います。レコードが到着するまで、テーブルの内容全体を引き出します。

これは、実際には、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

こんにちは、このお手伝いをありがとうございます。私はそれに1つの小さな変更を加えなければならなかった。私はそれがオーバーフローを引き起こしていたので、CInt()、ちょうどInt()を変更しなければなりませんでした。たとえそれを文字列として使用しても、依然としてそれを受け入れました。再度、感謝します。 –

関連する問題