2010-09-30 45 views
0

我这里有一个奇怪的..经典ASP记录不允许字段更新

我用传统的ASP

Set rs = server.CreateObject("ADODB.Recordset")    
    rs.ActiveConnection = g_conn 
     rs.CursorLocation=3     ' adUseClient 
     rs.LockType= 3      ' adLockBatchOptimistic 
     on error resume next 
     rs.Open strQuery  
     rs.activeConnection = nothing  
     on error goto 0 

所有的作品好,按预期的方式创建记录创建记录。我现在要更新的文字只在新值记录的字段...

  do while not rs.eof 
       for each fld in rs.fields 
        if (instr(",129,130,201,202,203,",","+cStr(rtrim(fld.type))+",")>0) then 
         theStr = g_VBPM.PMDecode(rs(fld.name)) 
         'rs(fld.name).value= ucase(rs(fld.name))  ' works 
         rs(fld.name).value= trim(theStr)    ' does not work 
        end if        
       next       
       rs.movenext 
      loop      

当我与字符串的大写文本替换字段值,它的工作原理。记录集反映字段内容的大写版本。但是,当我使用从C#DLL返回的字符串替换它时,不会返回错误消息,但记录集中的字段值不会更改。 C#代码的返回值包含正确的内容,如果我执行response.write,我可以看到它。但是,当我尝试将该字符串放入断开连接的记录集时,它不起作用。完全没有错误

任何人都看到过这种类型的行为?有任何想法吗? C#代码确实可行,我在应用程序中使用它和其他地方。

+0

Whew-终于发现问题... – Sparky 2010-10-06 16:52:58

+0

我会很快发布一个答案... – Sparky 2010-10-06 16:53:15

回答

1

这个问题需要一些挖掘:C#函数正在返回一个UTF-8字符串。 ASP代码确实将代码页设置为65001来处理UTF-8,这就是变量显示正确值的原因。但是,记录集中的某些字段类型不能保存UTF-8数据。另外,ASP代码上的ON ERROR处理没有发现错误,(Err.number为零)。但底层连接确实报告了错误。

一旦我适应代码,如果Err.Number的或连接出现错误引发错误,这个问题变得很明显,我能够制定一个变通......

感谢大家谁了时间看我的问题,我很感激

+0

嗨,你能回答[这个](http://stackoverflow.com/questions/28457538/sql-trigger-after-insert-update-another-table-with-conditions),谢谢 – stom 2015-02-11 21:26:58