Я пишу надстройку для Enterprise Architect, и мне нужно манипулировать внутренними скриптами. Я хотел бы добавить свою собственную функцию в существующий скрипт.Получить строку с избыточным синтаксисом sql update
скрипты хранятся в таблице t_script в колонке Script.
К сожалению, скрипты не отображаются в API, поэтому мне придется обойти это и использовать запрос обновления в базе данных для обновления сценария.
Проблема заключается в том, что скрипты имеют тенденцию использовать множество символов, которые могут представлять проблему при использовании их в запросе обновления sql, но я не очень хочу писать свою собственную функцию эвакуации.
Так что я попытался было это
public void addCode(string functionCode)
{
this._code += functionCode;
SqlCommand sqlCommand = new SqlCommand("update t_script set script = @functionCode where ScriptID = " + this.scriptID);
sqlCommand.Parameters.AddWithValue("@functionCode",this._code);
this.model.executeSQL(sqlCommand.CommandText);
}
Я надеялся, что sqlCommand.CommandText даст мне реальную SQL строку, которая собирается быть выполнена, но это не так. В основном это одна и та же строка, с которой я ее создал, и она не заменила «@functionCode».
Дополнительная трудность состоит в том, что моя SQL строка должна работать на всех типах СУБД, поддерживаемых EA
- SQL Server 2000, 2005, 2008 и 2012
- MySQL
- Oracle 9i, 10g, 11g и 12с
- PostgreSQL
- MSDE
- Sybase Adaptive Server Anywhere
- MS Access
- Progress OpenEdge
- Firebird
Кто-нибудь есть лучшее решение, то писать свою собственную функцию побега?
Ожидайте ожидаемого ;-) Конечно, вы могли бы попросить Sparxians предложить свою внутреннюю процедуру. Вероятно, так же, как попросить Папу совершить ошибку.Так что пока делайте то, что вы ожидали в любом случае: напишите свой собственный материал> :-( –
Я думаю, что единственным действительно безопасным и разумным способом сделать это будет использование bind-Variables в Select. Вам не потребуется NO Escaping. нужно сохранить переменные где-то ... – Falco
@Falco Как вы понимаете? Проблема в том, что мне нужна полная строка SQL, чтобы передать объект репозитория. У меня нет контроля над фактическим исполнением строки. –