【发布时间】:2011-06-17 14:22:21
【问题描述】:
我正在尝试对包含“REPLACE”函数的 MS Access 数据库执行 SQL 查询:
UPDATE MyTable
SET MyColumn = REPLACE(MyColumn, 'MyOldSubstring', 'MyNewSubstring')
WHERE Id = 10;
如果我从 MS Access(应用程序)内部运行此查询,它可以正常工作。但是当我尝试从我的应用程序运行它时,会引发异常。
例外:
System.Data.OleDb.OleDbException was unhandled
Message="Undefined function 'REPLACE' in expression."
Source="Microsoft Office Access Database Engine"
ErrorCode=-2147217900
StackTrace:
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
at System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
...
为什么会出现此异常?
更多信息:
- 我的应用程序是 WPF 应用程序
- 我正在使用 .NET 3.5
- 我运行 MS Access 2007
- 我的连接字符串是“Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\MyFolder\MyDatabase.accdb”
我的数据库访问代码看起来像这样,我将在其中将提到的 SQL 作为字符串传递:
public void ExecuteNonQuery(string sql)
{
OleDbCommand command = new OleDbCommand(sql);
OleDbConnection connection = new OleDbConnection(ConnectionString);
command.Connection = connection;
try
{
connection.Open();
command.ExecuteNonQuery();
}
catch
{
throw;
}
finally
{
connection.Close();
}
}
(为简洁起见,删除了一些像错误处理这样的代码。请注意,我只是在构建一个快速原型,所以这个管道代码永远不会被真正使用,所以请耐心等待。;)我仍然需要这可以工作......)
替代解决方案?
如果无法让 REPLACE 工作,也许您知道一些替代解决方案?我可以获取我想要更新的所有行,在代码中替换这个字符串,然后更新数据库中的行。但这可能是很多 SQL 查询(一个要获取,一个要更新的每一行)并且不是一个非常优雅的解决方案...
【问题讨论】: