问题呢,我在ASP论坛上发送过,粘贴过来:切入正题:是这样的,我现在是在用Microsoft .Net Framework做一个 访问Access数据库 的一个软件。其中它利用一项,就是可以保存FullPath(全局目录)。下面FullPath = "My\Name\ActualyMe\"表示一个在My根目录下的Name,它下面还有一个分支叫ActualyMe。树形结构------My
--------------Name
----------------------ActualyMe
----------------------Tmtony
----------------------BillGates
----------------------Joy----------------------...
--------------NameYourself
----------------------ActualyMe更加说明了这个东西。(它其实就像一个文件夹的树形结构)那么我的问题比较有综合性,我在C#开发环境当中使用一个叫“OleDbCommand”的控件,他有一项“ExecuteNonQuery”,表示不返回DataSet(数据设置的一个控件)而执行指定SQL内容。那么若我要将"Name"修改为"Hello"的话,下列语句UPDATE Directory SET FullPath = Replace( FullPath, "My\Name\", "My\Hello" ) Where FullPath LIKE "My\Name%"将会出现错误,“Undefined function 'Replace' in expression”。后来我想一个办法,因为知道MDB文件只是一个调用者,那么Replace函数八成是Access自带的,可能Jet不支持这个函数(因为其他像Left函数就被支持)。所以我尝试“查询(存储过程)”,同样的UPDATE WrongTheme SET FullPath = Replace(FullPath,[OldPath],[NewPath])
WHERE FullPath LIKE [FindStr];的查询若在Access中的"查询"中启动(查询-双击指定查询),会出现三个对话框,让您分别填入所需数值,然后确定以后,Access 将告诉我是否更新5行内容,我按确定以后,下列分支------My
--------------Hello
----------------------ActualyMe
----------------------Tmtony
----------------------BillGates
----------------------Joy----------------------...
--------------NameYourself
----------------------ActualyMe形成(若在后面不加斜线,如My\Name,那么NameYourSelf就可能变成HelloYourSelf,这不是我期望的。那么,我兴奋的将该查询通过C#调用,代码public void ExecuteProcedureNonQuery( string procedureName )
  {
   if ( procedureName == null )
    throw new ArgumentNullException( " 值不能为空,位于MyZone class。 " );   _oleDbSelectCommand.CommandType = CommandType.StoredProcedure;
   _oleDbSelectCommand.CommandText = procedureName;   _oleDbSelectCommand.Parameters.Clear( );   try {
 _oleDbSelectCommand.Parameters.AddWithValue( "OldPath", "My\Name\" );
    _oleDbSelectCommand.Parameters.AddWithValue( "NewPath", "My\Hello\" );
    _oleDbSelectCommand.Parameters.AddWithValue( "FindStr", "My\Name\*" );
    // tmtony老师,是这样的,我试验了一下"FindStr", "My\Name\%"发现它并无效果,在Access中显示“更新0行”,而“*”(星号通配符)则变成了“更新5行”    _oleDbSelectCommand.ExecuteNonQuery( );
   } catch ( InvalidOperationException ioex ) {
    throw new InvalidOperationException( "在ExecuteSQLQuery( string )中出现错误" +
     ioex.Message + ioex.StackTrace + ioex.Source );
   }
  }在启动的时候却出现了异常。位置在_oleDbSelectCommand.ExecuteNonQuery();Undefined function 'Replace' in expression.仍然是这个问题。Source = "Microsoft JET Database Engine"于是我将改为SQL并在C#中使用,问题依旧。但奇怪的是,在Access中运行正常,最重要的是,我调用的是Access的“查询”功能,“查询”不是在Access环境中运行吗?我只是调用了查询,并非是Access独有的函数。而独有的函数在Access查询中均运行正常。就同我刚才说的一样(在Access自带的“查询”功能中启用时成功更新5行)。我Google,yahoo,百度了好几个地方,连Microsoft MSDN全球Knowledge Library都查了个遍,却没有解释这个问题的。但也有几个方法,我试了试也不管用。
如:将函数分开,这好像是您提供的方法。代码忘记了,好像是有一个
fReplace函数,他实际上就是调用了Replace函数,只是封装了一下,目的是解决Access 2000的兼容问题。然后我把Replace函数改为fReplace,但Undefined function 'fReplace' in expression.
仍然产生。这就是问题,可能比前面的要简单一点。。
同样该问题发分,我受 风飘 的提醒,就不在此多说了。不过仍然万分感谢大家能抽出一点时间来帮我解决这个问题……