Это может быть не идеально, но это мое решение (на данный момент, по крайней мере):
JsonConvert.SerializeObject(new { Property = "<script>alert('o hai');</script>" }, new HtmlEncodeStringPropertiesConverter());
с простым JsonConverter, который выполняет HtmlEncode для значения, если оно является строкой
public class HtmlEncodeStringPropertiesConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(string);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
writer.WriteValue(Encoder.HtmlEncode(value.ToString()));
}
}
(Encoder
- Microsoft.Security.Application.Encoder
из библиотеки AntiXSS)
Ссылки на БД - это в значительной степени название игры. Если вы не можете создать его самостоятельно, проверьте, есть ли какие-либо общедоступные ссылки на БД, которые вы могли бы использовать.
Также возможно, что ваши администраторы баз данных захотят использовать одну из своих ссылок на БД для создания материализованного представления S2.Table2 в экземпляре S1.
Другим вариантом могут быть веб-службы, но я предполагаю, что вы » d столкнется с гораздо большим количеством административных проблем, чем при простой ссылке на БД. Рассматривайте их только в том случае, если есть веские причины для отсутствия ссылок (например, две отдельные организации, которые не хотят открывать брандмауэры между своими базами данных).
В противном случае вы попадете на действительно уродливую территорию, но, возможно, вы сможете заставить что-то работать. Например:
Однако вы действительно не хотите поддерживать какое-либо из этих решений в течение длительного времени.
дополнительные объекты каталога, определенные на обоих серверах, создают материализованное представление S2 как внешнюю таблицу в каталоге, которая может быть записана из S2 и прочитана из S1.Однако вы действительно не хотите поддерживать какое-либо из этих решений в течение длительного времени.
дополнительные объекты каталога, определенные на обоих серверах, создают материализованное представление S2 как внешнюю таблицу в каталоге, которая может быть записана из S2 и прочитана из S1.Однако вы действительно не хотите поддерживать какое-либо из этих решений в течение длительного времени.
Вам не понадобится ссылка на базу данных, если две схемы находятся в одной базе данных.
Ваш запрос должен работать со схемой S1, при условии, что S1 предоставлена привилегия SELECT на S2. table2 (из учетной записи dba или из схемы S2: GRANT SELECT ON S2.Table2 TO S1
).
Используйте оператор CREATE DATABASE LINK, чтобы создать ссылку на базу данных. Ссылка на базу данных - это объект схемы в одной базе данных, который позволяет вам получать доступ к объектам в другой базе данных.
немного не по теме, но вы можете захотеть использовать новый синтаксис соединения:
SELECT
T1.Id
FROM S1.Table1 T1
INNER JOIN S2.Table2 T2 ON T1.Id = T2.refId
Все условия соединения отображаются в поле "ON" ", а условия фильтрации появляются в" WHERE ".
Этот новый стиль упрощает чтение и понимание соединений LEFT / RIGHT. Кроме того, я не так хорошо знаком с Oracle (с тех пор, как я работал над ним, прошло много лет), но с SQL Server я видел проблемы, когда старый стиль соединения и новый стиль соединения смешивались вместе в запросе с использованием представлений .
Вы можете создать сохраненную процедуру java, которая подключается к другой базе данных и выполняет выбор в другой базе данных через JDBC. Сохраненная процедура java должна возвращать коллекцию. Вы можете присоединиться к этой коллекции через выбор из таблицы (...)
с таблицей в вашей собственной базе данных.
Примерно похожее решение см. здесь .
Я думаю, что этот подход будет медленным и сложным, потому что вам придется много писать код и создавать оболочку pl / sql для вашей хранимой в java процедуры.
Лучше создать ссылку на базу данных.
Вы не указываете, нужна ли эта функция как часть производственного кода, или если вы пытаетесь объединить две таблицы для выполнения одноразового анализа. В последнем случае вы можете использовать Microsoft Access для создания локального файла MDB, который содержит таблицы, связанные с двумя базами данных, а затем написать локальный запрос Access, который ссылается на эти две таблицы. Затем вы можете использовать этот mdb в качестве источника данных для различных инструментов отчетности.
Запросы могут не использовать индексы так же эффективно, как родная ссылка на Oracle db, но это было бы лучше, чем ничего.
edit: Nevermind - я вижу что это уже предлагалось выше.