Sto cercando di eseguire una query SQL su un database MS Access che contiene una funzione di "REPLACE":Eccezione quando si cerca di eseguire "SOSTITUIRE" contro MS Access
UPDATE MyTable
SET MyColumn = REPLACE(MyColumn, 'MyOldSubstring', 'MyNewSubstring')
WHERE Id = 10;
Se eseguo questa query dall'interno MS Accedi (l'applicazione) funziona bene. Ma quando provo ad eseguirlo dalla mia applicazione viene lanciata un'eccezione.
L'eccezione:
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()
...
Perché ottengo questa eccezione?
Maggiori informazioni:
- La mia applicazione è un'applicazione WPF
- sto usando .NET 3.5
- corro MS Access 2007
- mio connectionstring è "Provider = Microsoft.ACE .OLEDB.12.0; Origine dati = C: \ MyFolder \ MyDatabase.accdb "
Il mio codice di accesso al database è simile a questo, dove mi limiterò a passare in SQL citato come una stringa:
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();
}
}
(Alcuni codice come la gestione degli errori rimossa per brevità. Osserva che sto solo costruendo un prototipo rapido, quindi questo codice idraulico non verrà mai utilizzato per davvero, quindi ti prego di sopportarlo. ;) Ho ancora bisogno di questo per lavorare però ...)
Soluzione alternativa?
Se è impossibile far funzionare la SOSTITUZIONE, forse sai qualche soluzione alternativa? Potrei recuperare tutte le righe che voglio aggiornare, fare questa stringa sostituire nel codice e quindi aggiornare le righe nel database. Ma potrebbe trattarsi di molte query SQL (una da recuperare e una per ogni riga da aggiornare) e non sarebbe una soluzione molto elegante ...
E 'una buona risposta, ma non risolve la questione manifesti. –
Non ho una soluzione (non lavoro mai al di fuori di Access!), Ma speravo che il fatto di indicarlo potesse portare a una risposta da parte di qualcuno che potrebbe aiutare, forse qualcuno disposto a mettere insieme la brutta espressione richiesta usando InStr() e Len() per fare il lavoro. –
"forse qualcuno disposto a hackerare insieme la brutta espressione richiesta" - fatto! ;) – onedaywhen