2014-11-18 1 views
2

Я использую SlowCheetah для преобразования моего конфигурационного файла приложения. Моя проблема заключается в том, что некоторые из значений, которые он заменяет, являются операторами SQL, которые имеют такие условия, как ... where x > 1, а > заканчивается кодированием как &gt;, \r\n заканчивается как &#xD;&#xA; и так далее. Если я отправлю это заявление в базу данных, вы вызовете ошибку.Предотвращение SlowCheetah от кодирования «<", ">» и добавление для возврата каретки

Как предотвратить это? Я googled уже без везения.

+0

Для хорошего вопроса +1 – HaveNoDisplayName

+0

Не говорите ли вы медленному гепарду, что преобразовать? Почему вы меняете эти ключи? –

+0

@BillBlankenship Нет, я не говорю SlowCheetah, чтобы преобразовать эти ключи, но SlowCheetah все еще проходит через все. Например, если у вас есть параметр в вашем файле конфигурации, например: '' SlowCheetah все равно преобразует его в ' '(удаляет последнее пространство). Что раздражает, так это то, что вы модифицируете материал, который вы даже не говорите, чтобы он модифицировал и в процессе кодирования вещи, которые будут нарушать вещи. – Icarus

ответ

0

Чтобы "исправить" эту проблему - если вы можете назвать это - я в конечном итоге перемещение раздел который содержал специальные символы, которые были закодированы SlowCheetah в другом файле, и установите атрибут configSource в разделе, чтобы указать на новый файл. В принципе, я сделал это:

<pluginsSection configSource="Configs\pluginsConfig.xml"> 
</pluginSection> 

Теперь SlowCheetah преобразует файл App.config и содержимое pluginsConfig.xml не влияет.

0

Эти символы являются запрещенными символами в XML. Slow Cheetah использует XmlTransformableDocument, который, как мне кажется, наследуется от XmlDocument, поэтому при применении преобразования кодируются все символы разметки XML, в том числе ваши знаки «>».

Я не думаю, что вы можете легко исправить это поведение и не знаете, почему вы используете преобразования в недействительном XML-документе.

0

в целом: размещение ваших операторов внутри конфигурационного файла (или любой незащищенный файл в этом вопросе) не такую ​​блестящую идею .. если кто-нибудь когда-нибудь положить руки на этом Gilė файл они приобретут бесценную информацию о вашей структуре базы данных и логике.

пожалуйста, рассмотрите использование хранимых процедуры, которая скрывает логику базы данных, имена, оператор и такой (ваш конфиг будет содержать только хранимые процедуры вызовов с параметрами - без forbbiden XML символов)

, если вы по-прежнему настаиваете на том, чтобы сделать SQL запросы как обычный текст - вот почему .net имеет ресурсов ... вместо размещения того заявления в файл condig, поместить их в своих ресурсах проекта (файл с расширением Resx)

для WinForms приложений: Resources, where to put them, and how to reference them in C#

для веб-приложений: http://msdn.microsoft.com/en-us/library/ms247246%28v=vs.100%29.aspx

для библиотек (DLL-файлы): http://www.codeproject.com/Articles/5447/NET-Localization-using-Resource-file

+0

Использование хранимых процедур не всегда возможно в этом случае. Операторы SQL должны выполняться в разных системах баз данных (Sybase, MySQL, MS SQL, Oracle, файлы Excel и т. Д.). Доступ ко всем базам данных доступен только для чтения и из представлений, которые не предоставляют никакой разумной информации; кроме того, это внутреннее приложение. Что касается использования ресурсов и т. Д., То это немного хлопот, чтобы установить это, рассматривая способ разработки программы, который состоит из кучи плагинов, каждый из которых имеет свой собственный раздел конфигурации в App.config. Спасибо за Ваш ответ. – Icarus

Смежные вопросы