我试图对含有“替换”功能的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中
- 我的ConnectionString是 “提供者= Microsoft.ACE.OLEDB.12.0;数据源= 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();
}
}
(如错误的某些代码处理的简洁,删除观察到,我只建立一个快速原型,以使该管道代码永远不会被用于真实的,所以请大家多多包涵吧。)我还需要这个工作,虽然.. 。)
另一种解决方案?
如果无法得到更换工作,也许你知道的一些替代解决方案? 我可以获取所有我想要更新的行,就这串代码替换,然后更新数据库中行。 但是,这可能是很多的SQL查询(一个获取和每行一个更新),并不会是一个很优雅的解决方案...