Я пытаюсь выполнить SQL-запрос к базе данных MS Access, содержащей функцию «ЗАМЕНА»:
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; Источник данных = 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-запросов (один для извлечения и один для каждой строки для обновления), и это не будет очень элегантным решением ...