У меня есть приложение на C #, которое мы кодировали в ADO.NET. Я использовал интерфейсы IDbCommand
и IDbConnection
для создания кросс-базы данных.
До сих пор все работало замечательно (в Firebird, SQLite, SQL Server 2005 и 2008, Access 2007, Access 2010 и Oracle 11g).
Проблема у меня есть, у меня теперь есть база данных Oracle 10g, которую я должен поддерживать.
Все «нормальные» вещи, создание соединений и команды работают нормально, однако, когда я иду, чтобы создать параметр с использованием интерфейса IDataParameter
и cmd.CreateParamater()
не удается на 10g, из-за синтаксиса параметров в запросе (I использую параметризованные запросы).
Судя по всему, Oracle 10g из коробки не поддерживает использование знака @
. Oracle 11g, SQL Server и все другие, упомянутые выше, делают.
Например, следующий запрос не будет выполнен в 10g:
select * from Products where ProductId = @ProductId
Но, если я использую двоеточие, оно будет работать нормально, используя вышеупомянутые интерфейсы ado.net, поэтому этот запрос будет выполнен успешно:
select * from Products where ProductId = :ProductId
К сожалению, двоеточие не работает в большинстве других реализаций базы данных.
Или есть опция, которую можно переключить в базе данных Oracle 10g, которая позволяет использовать разделитель @
вместо разделителя :
для параметров.
Текущее решение, которое у меня есть, далеко не идеальное, у меня есть клиент / клиент, инициализирующий свойство ParameterDelimiter
(по умолчанию используется знак @
), и использую string.Format
, чтобы вставить ParameterDelimiter
,
Есть ли какой-нибудь стандартный способ сделать это, которого я упускаю, без необходимости предоставления клиентом разделителя или без знания моих базовых библиотек о реализации базы данных? (Например, включая ODP.NET и проверку на OracleConnection
)